App-Hasher
view release on metacpan or search on metacpan
use Digest::SHA1;
use File::Basename qw(fileparse);
use Term::ANSIColor qw(colored);
sub _get_hash_from_file_name {
my ($file_name) = @_;
my $result = open my $fh, '<', $file_name;
if (not $result) {
say "Error. Can't open file '$file_name' - $!.";
exit 1;
}
# $sha1->b64digest
#
# Same as $sha1->digest, but will return the digest as a base64 encoded
# string. The length of the returned string will be 27 and it will only
# contain characters from this set: 'A'..'Z', 'a'..'z', '0'..'9', '+' and
# '/'.
my $digest = Digest::SHA1->new->addfile($fh)->b64digest;
$extension = "";
}
return $extension;
}
# main
sub main {
if (not defined $ARGV[0]) {
say "Error. Expecting at least one filename as the parameters to the script.";
exit 1;
};
foreach my $argument (@ARGV) {
next if -d $argument;
my $hash = _get_hash_from_file_name($argument);
my $extension = _get_file_extension($argument);
my ($original_file_name, $dir) = fileparse $argument;
my $new_file_name = $hash . $extension;
say sprintf
"%s{ %s -> %s }",
$dir,
colored($original_file_name, 'red'),
colored($new_file_name, 'green'),
;
my $result = rename(
$dir . $original_file_name,
$dir . $new_file_name
);
if (not $result) {
say "Error. Can't rename file '$dir$original_file_name' to '$dir$new_file_name' - $!.";
exit 1;
}
}
}
main() if not caller;
1;
__END__
( run in 2.254 seconds using v1.01-cache-2.11-cpan-d7a12ab2c7f )