minisync/s.pl

40 lines
1.0 KiB
Perl
Executable File

#!/usr/bin/env perl
use strict;
use POSIX qw(strftime);
$|++;
sub mj {
%_ = @_;
'{ts:"'.strftime( '%Y-%m-%d %H:%M:%S', localtime).'", proc:"s", '.join( ', ', map "$_:\"$_{$_}\"", keys%_)."}\n";
}
sub readg {
my $data = '';
while( length( $data) < $_[0]) {
read( STDIN, $data, $_[0]-length($data), length($data)) or return(0);
}
$data;
}
my$dir = shift @ARGV;
$dir =~ /^(\/.*)\/([^\/]+)$/ or die( mj( error=>'invalid_path_expression', message=>'Path-Expression is invalid.'));
($dir, my$fexpr) = ($1, $2);
chdir( $dir) or die( mj( error=>'change_directory', value=>$dir, message=>$!));
opendir( DH, '.') or die( mj( error=>'dir_not_found', message=>'Directory not found.'));
while( my$filename = readdir( DH)) {
next unless $filename =~ /$fexpr/ and -f $filename;
print pack( 'nNA*', 1, length($filename), $filename);
open F, $filename;
my$length = readg 4;
$length = unpack 'N', $length;
seek F, $length, 0;
while( read( F, my$r, 1400)) {
print pack( 'nNA*', 2, length($r), $r);
}
close F;
}
closedir DH;
exit( 0);