将文件从一个目录复制到另一个目录,忽略目标文件在过去一小时内被修改的文件?

将文件从一个目录复制到另一个目录,忽略目标文件在过去一小时内被修改的文件?

如果目标(而非源)文件在过去一小时内未修改,则尝试发现复制文件的命令。

答案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替换为。\0find\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

相关内容