ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/ozone/mgar/gar/bin/killdupes
Revision: 1
Committed: Sat Jun 20 14:58:51 2026 UTC (4 weeks, 3 days ago) by operz
File size: 1828 byte(s)
Log Message:
Initial import of OZSW mgar build tree

File Contents

# User Rev Content
1 operz 1 #!/bin/env perl -lw
2     #
3     # $Id: killdupes 2484 2008-12-09 10:20:31Z dmichelsen $
4     #
5     # Copyright 2006 Cory Omand <comand@blastwave.org>
6     # All rights reserved. Use is subject to license terms.
7     #
8     # Redistribution and/or use, with or without modification, is
9     # permitted. This software is without warranty of any kind. The
10     # author(s) shall not be liable in the event that use of the
11     # software causes damage.
12     #
13     # killdupes - Remove duplicate packages from a directory, with or
14     # without user interaction. Note that this only works
15     # for packages named according to package standards.
16     #
17    
18     use strict;
19     use File::Basename;
20     use Getopt::Std;
21     use Data::Dumper;
22     use vars qw/$opt_n/;
23    
24     getopts ":n";
25    
26     my %packages;
27     foreach my $file (@ARGV) {
28     my $bn = basename $file;
29     my ($pkg,$ver) = split /-/, $bn, 3;
30     push @{$packages{$pkg}}, $file;
31     }
32    
33     foreach my $pkg (sort keys %packages) {
34     if (scalar @{$packages{$pkg}} > 1) {
35    
36     my @unlink;
37     if ($opt_n) {
38     # Non-interactive
39     my %finfo;
40     foreach my $file (@{$packages{$pkg}}) {
41     $finfo{$file} = (stat($file))[9];
42     }
43     @unlink = sort {$finfo{$a} <=> $finfo{$b}} keys %finfo;
44     pop @unlink;
45     }
46     else {
47     # Write dupes out to a tempfile
48     my $tfile = "/tmp/kd.$pkg.$$";
49     open TFILE, ">>$tfile" or die "Cannot open file: $!";
50     print TFILE foreach @{$packages{$pkg}};
51     close TFILE;
52    
53     # Use ckitem for menu selection
54     my ($rst) = `ckitem -p "Keep which file" -f $tfile`;
55     unlink $tfile;
56    
57     chomp $rst; last if $rst eq 'q';
58     @unlink = grep { !/$rst/ } @{$packages{$pkg}};
59     }
60     foreach (@unlink) { print "unlink: $_" ; unlink or die }
61    
62     }
63     }

Properties

Name Value
svn:executable *