如果目标(而非源)文件在过去一小时内未修改,则尝试发现复制文件的命令。
答案1
据我所知,没有任何命令能够完全满足您的要求。像这样的东西应该可以工作(--dry-run
当您确定对结果满意时删除 ;如果您希望它运行得更安静,则将--verbose
其替换为 ):--quiet
src=/path/to/source
dst=/path/to/target
comm -z -23 \
<(find "$src" -type f -printf '%P\0' | sort -z) \
<(find "$dst" -type f -mmin -60 -printf '%P\0' | sort -z) |
rsync --dry-run --verbose --archive --from0 --files-from - "$src" "$dst"
它假设相对较新的实用程序了解如何处理 NUL 终止的行。如有必要,并且只要您可以保证没有文件名包含换行符,您可以删除三个-z
标志 和rsync
,并将命令中的--from0
替换为。\0
find
\n
答案2
如果您的所有副本都是现有文件,则可以以另一种方式看待它:如果本地文件早于一小时,则覆盖它们。所以,随着目的地目录作为工作目录:
find . -mindepth 1 -maxdepth 1 -type f -mmin +60 -exec cp /source/directory/{} . \;
在哪里:
find . -mindepth 1 -maxdepth 1 -type f -mmin +60
查找超过一个小时的本地文件-exec cp /source/directory/{} . \;
用同名的名称覆盖它们/source/directory