App-Hasher

 view release on metacpan or  search on metacpan

bin/hasher  view on Meta::CPAN

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;

bin/hasher  view on Meta::CPAN

        $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 )