-   Linux - Networking (
-   -   rsync - sync files modified within the last 60 days (

boomklever 06-03-2009 02:45 AM

rsync - sync files modified within the last 60 days

Can anybody tell me how I can synchronise files between two computers in a network that have been modified or created within the last 60 days?

Thanks in advance! :-)

billymayday 06-03-2009 02:54 AM

something like

find /path -file -mtime -60 -exec rsync {} destination \;

boomklever 06-03-2009 03:13 AM

Thanks, I haven't thought of find. That helps. :-)

boomklever 06-03-2009 09:41 AM

Maybe the way I went to work on the problem is more complicated than it needs to be. Anyway, I worked around it with an extra step, that is done by a perl script I wrote for the purpose. The script, with the help of find, copies all files from a source directory to a destination directory if they're older than a specified amount of days.

Maybe it will come in handy for somebody else, so I post it here:


use strict;
use warnings;
use File::Path;
use File::Basename;
use File::Spec;
use File::Copy;
use Cwd;
use Getopt::Long;

# make output unbuffered
$| = 1;

my $path    = getcwd;
my $mtime    = 1;
my $dest;
my $verbose  = '';
my $showhelp = '';
my $result  = GetOptions("source=s"  => \$path,
                          "mtime=i"  => \$mtime,
                          "dest=s"    => \$dest,
                          "help"      => \$showhelp,
                          "verbose"  => \$verbose);

# print "\$path = $path\n\$mtime = $mtime\n\$dest = $dest\n\$showhelp = $showhelp\n\$verbose = $verbose\n";
# exit(0);

my $usage = "Usage: $0 --dest <destination-path>\n\t" .
            "[--source <source-path> | --mtime <mtime> | --verbose] [--help]\n\t" .
            "Type $0 --help for more information.";
my $help = <<EOHELP;
$0 - Copy file hierarchies selectively
    based on their modification times

    -s | --source=SourceDir    Source path. Default: pwd
    -m | --mtime                mtime (see man find). Default: 1
    -d | --dest=DestDir        Destination path. Mandatory option.
    -h | --help                Print this help screen.
    -v | --verbose              Be more verbose. Default: false

if ($showhelp) {
    print $help;
unless ($dest) {
    die "$usage\n";

# remove trailing slash from $dest
$dest =~ s/\/$//;
my $find = "find $path -type f -mtime -$mtime";

my @files = `$find`;
my %dirs_created;
foreach (@files) {
    # debug

    my ($filename, $directories, $suffix) = fileparse($_);
    my $new_dir = File::Spec->canonpath(File::Spec->catdir($dest, $directories));
    unless (exists $dirs_created{$new_dir}) {
            $dirs_created{$new_dir} = mkpath($new_dir);
            print "Created $new_dir\n" if $verbose;
    copy($_, File::Spec->catfile($new_dir, "$filename$suffix"));
    print File::Spec->catfile($new_dir, "$filename$suffix") . "\n" if $verbose;


All times are GMT -5. The time now is 12:24 AM.