目标是仅 rsync(或使用任何其他能提供所需结果的工具)在某个日期之后创建或修改的文件。它应该适用于包含空格(和/或其他需要转义的字符)的文件名。
我在 OS X 10.6.5 上成功使用了该命令: 但find . -newermt "2010-11-23 16:52:50" -type f -exec rsync -vuptn '{}' ../rsync_test/ ';'
我不认为-newermt
它在 OS X 以外的其他操作系统上有效。
此命令的问题在于,它对找到的每个文件运行一次 rsync,而这似乎不是正确的方法。我尝试将最后一个更改为,;
以便+
它等待整个文件列表,但它会停止(我尝试过"+"
,\+
以及其他退出方式)。
背景:我正在尝试在远程位置备份我的文件。这些文件包括大量原始格式的照片和其他格式(照片可以,每天大约 30GB),由于上传带宽较小(ADSL 很差),通过网络进行 rsync 会花费大量时间。因此,我们的想法是在远程位置留出大量磁盘空间,每周一次将新/修改的文件传输到小型外部硬盘上。然后可以轻松使用 rsync 在远程位置添加新/修改的文件。为此,我需要在一周内将新/修改的文件同步到外部硬盘上,因此我总是有每个文件的 2 个副本,一个在远程位置,用于保存超过一周的文件,另一个在外部硬盘上,用于保存自上次传输以来的新/修改的文件。
我打算让这个命令每 10 分钟(cron)运行一次,并使用上次运行的日期和时间。
你能修复我的命令吗?或者你有更好的解决方案吗?
答案1
我有点搞不懂你要做什么。Rsync 本身只会传输新文件/修改过的文件。因此,如果你每周在硬盘上传输一次数据,你可以定期运行 rsync,它所消耗的带宽不会比你建议使用的解决方案更多(也可能更少)find
。
所有这些工作find
看起来就像您只是复制已经存在的功能。
如果您确实想使用find
,则不需要xargs
或xargs
类似的功能;只需执行以下操作:
find ... -print | rsync ... --files-from=-
“您认为合适的任何其他选项”在哪里...
。这会导致 rsync 从 stdin 读取文件列表。
答案2
+
仅适用于 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
创建一个具有适当时间的文件然后-newer
在其上使用来模拟它。