App-Hashl
view release on metacpan or search on metacpan
our $VERSION = '1.01';
STDERR->autoflush(1);
GetOptions(
'd|database=s' => \$db_file,
'e|extra-db=s' => \@edb_files,
'f|force' => \$add_unignore,
'n|no-progress' => sub { $show_progress = 0 },
's|read-size=i' => sub { $read_size = $_[1] * 1024 },
'V|version' => sub { say "hashl version ${VERSION}"; exit 0 },
'x|one-file-system' => sub { $xdev_fsno = ( stat($base) )[0] },
) or usage();
if ( substr( $db_file, 0, 1 ) ne q{/} ) {
$db_file = "${base}/${db_file}";
}
my $action = shift;
sub usage {
or die("Cannot copy ${file} to ${to}/${cp_base}: $!\n");
return;
}
sub db_find_new {
my ( $file, $path ) = @_;
if ( not any { $_->file_in_db($path) } @ehashl ) {
print STDERR "\r\e[2K";
say $file;
}
return;
}
sub db_find_known {
my ( $file, $path ) = @_;
if ( any { $_->file_in_db($path) } @ehashl ) {
print STDERR "\r\e[2K";
say $file;
}
return;
}
sub file_info {
my ($file) = @_;
my $entry = $hashl->file($file);
printf( "%-7s %s %s\n",
$db->si_size( $file->{size} ),
$dt->strftime($time_format),
colorize( $name, \%cmap ) );
}
return;
}
sub cmd_list_files {
say join( "\n", sort map { $_->files } @ehashl );
return;
}
sub cmd_list_ignored {
ensure_equal_hash_sizes();
say join( "\n", map { $_->ignored } @ehashl );
return;
}
sub cmd_update {
drop_deleted();
prepare_db_run();
$find_ref = \&db_update;
$find_db_write = 1;
( run in 1.245 second using v1.01-cache-2.11-cpan-d7a12ab2c7f )