rsync 仅从丢失某些文件的源复制新文件

rsync 仅从丢失某些文件的源复制新文件

最近,我经常rsync将一个包含大量文件和子目录的大目录复制到外部硬盘上。有些文件的文件名太长,rsync无法复制。截断有问题的文件名后,现在我想复制生成的新文件。

源目录中有一些文件被我删除,但我不希望目标目录中的任何内容被我删除rsync。我希望它们保持完整,而不被镜像到源,同时复制源中的新文件,最后从源中删除源和目标之间常见的所有文件 ( --remove-from-source)。

rsync -nrhtPsv --stats --ignore-existing --remove-source-files /run/media/username/hdd1/DIR1 /run/media/username/external_hdd

据我所知,--ignore-existing两者--remove-source-files不兼容。

--ignore-existing并且--update在空运行中不显示任何有关删除/删除任何内容的信息,但都列出了缺少文件的目录的路径。

什么命令可以做我想要的事情?

答案1

多项标准:

  • 我不希望目标目录中的任何内容被删除rsync- 不指定--delete
  • 我想要复制源处的 [...] 新文件- 照常
  • 从源中删除源和目标之间共有的所有文件- 使用--remove-source-files

您没有提到的是目标中的现有文件是否应该更新,所以我假设它们应该更新。

结果命令应如下所示,

rsync --dry-run -rt -Phv --stats --remove-source-files /run/media/username/hdd1/DIR1 /run/media/username/external_hdd

(删除--dry-run以执行更改而不仅仅是查看它们。)

您遇到的问题--ignore-existing --remove-source-files--ignore-existing作为排除规则实施的。这意味着目标上存在的文件将被忽略,但由于它们被忽略,因此它们不能成为--remove-source-files.根据您的情况,您可以使用--backup --remove-source-files然后在目标上恢复备份:

find /run/media/username/external_hdd -type f -name '*~' -exec sh 'for f in "$@"; do echo mv -f "${f} "${f%~}"; done' _ {} +

(删除echo以执行重命名,而不仅仅是查看它们。)

相关内容