toliveira Asked: 2019-03-21 05:54:04 +0800 CST2019-03-21 05:54:04 +0800 CST 2019-03-21 05:54:04 +0800 CST 比较两个目录:如果文件不存在或相同,则移动;否则,什么都不做 772 我有四种类型的文件: JUST_SOURCE 仅存在于源目录中 JUST_TARGET 只存在于目标目录 SAME 存在于源目录和目标目录中,并且具有相同的校验和 DIFFERENT 存在于源目录和目标目录中,但具有不同的校验和 我想对他们每个人执行以下操作: JUST_SOURCE 移动到目标 JUST_TARGET 什么都不做 SAME 从源中删除 不同什么都不做 我怎样才能从命令行做到这一点?我用 rsync 尝试了很多可能性,但没有奏效。 files rsync 1 个回答 Voted Best Answer xenoid 2019-03-21T06:26:26+08:002019-03-21T06:26:26+08:00 你有两件事要做: 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(真,对于 bash),如果不同则返回 1(假),因此 bash 仅计算 && 的第一项,如果它是假的(false && anything总是假的)并且不会执行rm如果文件是不同的。
你有两件事要做:
1)文件
source
不在target
:-n
如果目标存在,则防止覆盖,因此您复制所有内容并mv -n
为您进行存在检查2) 中的文件
target
与中的文件相同source
,删除中的文件source
cmp
如果文件相同则返回 0(真,对于 bash),如果不同则返回 1(假),因此 bash 仅计算 && 的第一项,如果它是假的(false && anything
总是假的)并且不会执行rm
如果文件是不同的。