Compare commits

...

2 Commits

Author SHA1 Message Date
Peter J. Holzer e4c489ce8f Finish finddup
This doesn't look like it ever worked. Now it does.
2019-04-20 00:59:42 +02:00
Peter J. Holzer bcfae857e0 Port to perl 5.24+
The experimental autoderef feature was cancelled in 5.24.
Use postderef instead which is available (originally also experimental,
but now mainline) since 5.20.
2019-04-20 00:56:17 +02:00
2 changed files with 20 additions and 23 deletions

29
finddup Normal file → Executable file
View File

@ -6,7 +6,7 @@ finddup - yet another tool for finding duplicates
=cut
use v5.10;
use v5.20;
no autovivification 'fetch';
use File::Find;
use File::stat;
@ -25,17 +25,17 @@ find(sub {
unless ($files->{$size}{$hash}) {
$files->{$size}{$hash} = [];
}
push $files->{$size}{$hash}, { path => $File::Find::name,
size => $size,
dev => $st->dev,
ino => $st->ino,
};
push $files->{$size}{$hash}->@*, { path => $File::Find::name,
size => $size,
dev => $st->dev,
ino => $st->ino,
};
}
},
$filesdir
},
$dir
);
for my $size (keys $files) {
for my $size (keys $files->%*) {
if (@{ $files->{$size}{""} } == 1) {
next;
}
@ -46,16 +46,14 @@ for my $size (keys $files) {
unless ($files->{$size}{$hash}) {
$files->{$size}{$hash} = [];
}
push $files->{$size}{$hash}, $file;
push $files->{$size}{$hash}->@*, $file;
}
delete $files->{$size}{""};
}
for my $hash (keys $files->{$size}) {
for my $hash (keys $files->{$size}->%*) {
if (@{ $files->{$size}{$hash} } > 1) {
for my $file (@{ $files->{$size}{$hash} }) {
unless ($st->dev == $file->{dev} && $st->ino == $file->{ino}) {
say "$file->{path}";
}
while (my ($i, $file) = each @{ $files->{$size}{$hash} }) {
say "$i: $file->{path}";
}
say "";
}
@ -64,4 +62,3 @@ for my $size (keys $files) {
# vim: tw=132 sw=4 expandtab

View File

@ -6,7 +6,7 @@ finddup - yet another tool for finding duplicates
=cut
use v5.10;
use v5.20;
no autovivification 'fetch';
use File::Find;
use File::stat;
@ -25,11 +25,11 @@ find(sub {
unless ($haystack->{$size}{$hash}) {
$haystack->{$size}{$hash} = [];
}
push $haystack->{$size}{$hash}, { path => $File::Find::name,
size => $size,
dev => $st->dev,
ino => $st->ino,
};
push $haystack->{$size}{$hash}->@*, { path => $File::Find::name,
size => $size,
dev => $st->dev,
ino => $st->ino,
};
}
},
$haystackdir
@ -50,7 +50,7 @@ find(
unless ($haystack->{$size}{$hash}) {
$haystack->{$size}{$hash} = [];
}
push $haystack->{$size}{$hash}, $file;
push $haystack->{$size}{$hash}->@*, $file;
}
delete $haystack->{$size}{""};
}