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

19
finddup Normal file → Executable file
View File

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

View File

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