4種類のファイルがあります。
- JUST_SOURCEはソースディレクトリにのみ存在します。
- JUST_TARGET は宛先ディレクトリにのみ存在します。
- ソースディレクトリとターゲットディレクトリの両方に同じコンテンツがあり、チェックサムも同じです。
- ソースディレクトリとターゲットディレクトリにDIFFERENTがありますが、チェックサムは異なります。
私はそれらのそれぞれについて次のことをしたいと思います。
- JUST_SOURCEターゲットに移動
- JUST_TARGETは何もしません。
- ソースからも削除
- 何も違わないでください。
コマンドラインでこれを行うにはどうすればよいですか?私は成功せずに多くのrsyncの可能性を試しました。
答え1
やるべきことは2つあります。
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
。