両方のディレクトリを比較します。ファイルが存在しないか同じ場合は移動し、そうでない場合は何もしません。

両方のディレクトリを比較します。ファイルが存在しないか同じ場合は移動し、そうでない場合は何もしません。

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

おすすめ記事