Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/perl
- # create a list of image files, mtime, and sha256sum for later analysis
- use v5.12; # 5.12+ gives strict and say...
- use warnings;
- use File::Find;
- use Digest::SHA;
- use Image::Info qw(image_type);
- use Term::ProgressBar::Simple;
- use Text::CSV;
- my @search_dirs = @ARGV or die "Need at least one directory name:$!";
- my $csv = Text::CSV->new( { binary => 1, eol => qq{\r\n} } )
- or die "Cannot use CSV: " . Text::CSV->error_diag();
- my $dbname = q{fileinfo.db};
- open my $FH, q{>:encoding(utf8)}, $dbname or die "$dbname: $!";
- my $tot_files = 0;
- find( sub { $tot_files++ if -f $File::Find::name }, @search_dirs );
- say "Scanning $tot_files files in "
- . join( q{ }, @search_dirs )
- . ". Saving data to $dbname.";
- my $progress = Term::ProgressBar::Simple->new($tot_files);
- find( \&process_file, @search_dirs );
- sub process_file {
- return if not -f $File::Find::name;
- $progress++;
- if ( not image_type($File::Find::name)->{error} ) {
- my $sha = Digest::SHA->new(q{sha256});
- $sha->addfile( $File::Find::name, q{b} );
- my (
- $dev, $ino, $mode, $nlink, $uid,
- $gid, $rdev, $size, $atime, $mtime
- ) = stat($File::Find::name);
- $csv->print( $FH,
- [ $File::Find::name, $_, $mtime, $size, $sha->hexdigest ] );
- } # if it's an image
- } # sub process_file
- __END__
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement