我如何从 SRC 同步到 DEST,验证 DEST 文件,然后删除 SRC 文件?(递归)

我如何从 SRC 同步到 DEST,验证 DEST 文件,然后删除 SRC 文件?(递归)

我在 bash 脚本中有两个目录,由这两个变量保存。

$SRC

$目标


我该怎么做rsync

  1. 将文件从 $SRC/ 复制到 $DEST/,
  2. 验证 $DEST/* 文件是否与 $SRC/ 文件匹配(最佳匹配,但速度较慢)
  3. 然后删除 $SRC/ 文件?

我谷歌搜索的所有内容都给出了执行 rsync 然后删除 DEST 文件的示例。

我不明白这一点,为什么要rsync对目标目录执行此操作,然后删除它?

进行谷歌搜索,看看我的意思。

答案1

因此,移动文件的选项是--remove-source-files。这是手册页,并参见此处的一些讨论: https://unix.stackexchange.com/questions/43957/using-rsync-to-move-not-copy-files-between-directories

请注意,rsync 始终使用校验和来验证文件,但这是否足以满足您的要求则取决于您。值得注意的是,目标的校验和是在传输时计算的,而不是在写入磁盘后计算的,因此它不是基于生成的文件计算的,并且您不会遇到失败,除非写入时操作系统出现错误。这里有一些讨论: https://unix.stackexchange.com/questions/30970/does-rsync-verify-files-copied-between-two-local-drives

如果这还不能满足您的需求,请考虑编写一个脚本来 rsync 文件而不删除源,再次运行 rsync 来-c选择/复制校验和不匹配的文件,最后用rm或其他方式删除源文件。

答案2

rsync这应该是选项--remove-source-files的直接使用

rsync --dry-run --stats -av --remove-source-files "$SRC/" "$DEST/"

当您满意该命令将执行您认为它应该执行的操作时,请删除--dry-run(也许)。--stats

相关内容