Skip to content

Instantly share code, notes, and snippets.

@loochao
Created November 21, 2016 21:43
Show Gist options
  • Select an option

  • Save loochao/a59348c314c2dfd2cc9dc776efe62cfe to your computer and use it in GitHub Desktop.

Select an option

Save loochao/a59348c314c2dfd2cc9dc776efe62cfe to your computer and use it in GitHub Desktop.
#!/usr/texbin/perl
use strict;
use warnings;
my $ROOT = "/Volumes/DATA/Dropbox/Research/Papers2/"; # dir holding data files
#my $ROOT = "$ENV{HOME}/Downloads/Test/SRC"; # dir holding data files
my $META = "$ENV{HOME}/Downloads/Test/DEST"; # dir holding meta files
my %FILE_TO_DATE = file_hash( $ROOT );
my %META_TO_DATE = file_hash( $META );
for my $file (sort keys %FILE_TO_DATE) {
my $fdate = $FILE_TO_DATE{$file};
my $mdate = $META_TO_DATE{$file};
defined $mdate and $mdate gt $fdate and next;
update_meta("$ROOT/$file", "$META/$file");
}
sub update_meta {
my ($file, $meta) = @_;
my $meta_dir = $meta;
$meta_dir =~ s{/[^/]+$}{};
print "Updating: $file\n";
-d $meta_dir or system("mkdir", "-p", $meta_dir);
system("touch", $meta); # YOUR UPDATE COMMAND GOES HERE
}
sub file_hash {
my $dir = shift;
# my @files = `find $dir -type f -printf '%p:%C+\n'`;
my @files = `find $dir -type f -print0 | xargs -0 stat -f '%p+\n'`;
for (@files) {
chomp;
s{^$dir/}{};
}
return map { split(/:/, $_, 2) } @files;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment