比较两个目录:如果文件不存在或相同,则移动;否则,什么也不做

比较两个目录:如果文件不存在或相同,则移动;否则,什么也不做

我有四种类型的文件:

  • JUST_SOURCE仅存在于源目录中
  • JUST_TARGET仅存在于目标目录中
  • 源目录和目标目录中都存在相同的内容,并且具有相同的校验和
  • DIFFERENT 存在于源目录和目标目录中,但具有不同的校验和

我想对他们每个人做以下事情:

  • JUST_SOURCE 移动到目标
  • JUST_TARGET 不执行任何操作
  • 同样从源中删除
  • 不同什么都不做

我怎样才能从命令行做到这一点?我已经尝试了很多 rsync 的可能性,但没有成功。

答案1

你有两件事要做:

1) 文件source不在target

 mv -n "$source"/* $target

-n如果目标存在,则防止覆盖,因此您复制所有内容并将mv -n为您进行存在性检查

2) 中的文件target与 中的文件相同source,删除 中的文件source

 for tgt in $target/* ; do src="$source"/$(basename "$f") ; cmp "$tgt" "$src" && rm "$src" ; done

cmp如果文件相同则返回 0(true,对于 bash),如果不同则返回 1(false),因此 bash 仅计算 && 的第一项(如果它为 false(始终为 false)),并且如果文件相同则false && anything不会执行rm不同的。

相关内容