我有四种类型的文件:
- 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
不同的。