目标是rsync(或使用任何其他提供所需结果的工具)只有在date之后创build或修改的文件。 它应该使用包含空格的文件名(和/或其他需要转义的字符)。
我成功地在OS X 10.6.5上使用这个命令: find . -newermt "2010-11-23 16:52:50" -type f -exec rsync -vuptn '{}' ../rsync_test/ ';' find . -newermt "2010-11-23 16:52:50" -type f -exec rsync -vuptn '{}' ../rsync_test/ ';' 我不认为-newermt虽然比OS X更努力工作。
这个命令的问题在于它对每个find的文件运行一次rsync,似乎并不是正确的方法。 我试图改变最后; 与一个+所以它等待整个文件列表,但它刹车(我尝试"+" , \+和其他方式逃脱)。
背景:我正在尝试在远程位置备份我的文件。 这些文件是原始格式和其他格式(照片每天大约30GB)的很多照片,rsync虽然networking将由于上传带宽小(ADSL吸收)而需要不可用的时间。 所以这个想法是在远程位置有很多的磁盘空间,每周一次在小型的外部硬盘上传输新的/修改的文件。 rsync可以很容易地用来在远程位置添加新的/已修改的文件。 为此,我需要在一周内同步外部硬盘驱动器上的新/修改的文件,所以我总是在每个文件的远程位置存放2个以上的文件,以存放超过一周的文件,或在外部硬盘驱动器上存放新的/修改过的文件自上次运输以来。
我打算每隔10分钟(cron)运行一次这个命令,上次运行的date和时间。
你能解决我的命令吗? 或者你有更好的解决scheme?
我对你想要做的事情有点困惑。 Rsync本身只能传输新的/修改过的文件。 因此,如果您每周在硬盘上传输数据,则可以定期运行rsync,并且不会比使用find的解决scheme带来更多的带宽(也可能不足)。
所有这些工作与find似乎你只是复制已经存在的function。
如果你真的想使用find ,你不需要xargs或者xargs like的特性; 只是这样做:
find ... -print | rsync ... --files-from=-
哪里是“你认为合适的其他select”。 这会导致rsync从标准input读取文件列表。
+只适用于GNU find,而OSX有BSD find。 使用-print0和xargs -0来模拟它。
-newermt应该适用于GNU find的新版本。 我的Fedora 13机器(GNU find 4.4.2)有,但不是我的CentOS 5机器(GNU find 4.2.27)。 你应该可以使用touch来创build一个适当的时间文件,然后使用-newer来模拟它。