diff options
-rwxr-xr-x | bin/hashl | 26 |
1 files changed, 12 insertions, 14 deletions
@@ -12,6 +12,7 @@ use Digest::SHA qw(sha1_hex); use File::Find; use Getopt::Long; use Storable qw(nstore retrieve); +use Time::Progress; my $base = getcwd(); my $rel_paths = 1; @@ -19,6 +20,7 @@ my $read_size = (2 ** 20) * 4; # 4 MiB my $db_file = "$base/hashl.db"; my $total = 0; my $cur = 0; +my $timer; my $db; @@ -36,18 +38,6 @@ if (-r $db_file) { $db = retrieve($db_file); } -sub print_status { - my ($file) = @_; - local $| = 1; - - printf( - "\r\e[2K%d/%d %s", - $cur, - $total, - $file, - ); -} - sub get_total { my $file = $File::Find::name; if (-f $file and $file ne $db_file) { @@ -55,13 +45,14 @@ sub get_total { } } - sub process_file { my $file = $File::Find::name; my $path = $file; my ($size, $mtime) = (stat($file))[7,9]; my ($fh, $data); + local $| = 1; + if (not -f $file or $file eq $db_file) { return; } @@ -72,7 +63,7 @@ sub process_file { $file = substr($file, length($base) + 1); } - print_status($file); + print $timer->report("\r\e[2KUpdating: %p done, %L elapsed, %E remaining", $cur); if (exists($db->{$file}) and $db->{$file}->{'mtime'} == $mtime and @@ -98,6 +89,13 @@ sub process_file { if ($action eq 'update') { find(\&get_total, $base); + + $timer = Time::Progress->new(); + $timer->attr( + min => 1, + max => $total + ); + find(\&process_file, $base); nstore($db, $db_file); } |