2017-05-17 4 views
0

いくつかの共通ファイルを持つ2つのフォルダがあります。xyzフォルダから重複ファイルを削除したいとします。Bash:異なるフォルダから重複したファイルを検索して削除する

のfolder1:

/abc/file1.csv 
/abc/file2.csv 
/abc/file3.csv 
/abc/file4.csv 

フォルダ2:

/xyz/file1.csv 
/xyz/file5.csv 

私は両方のフォルダを比較し、/xyzフォルダから重複を削除したいです。出力は次のようになります。今のところfile5.csv

私が使用しています:

find "/xyz" "/abc" "/abc" -printf '%P\n' | sort | uniq -u | -exec rm {} \; 

しかし、それは理由で失敗:-execあなたがバイナリを含むパッケージを検索するには、次のコマンドを実行することができますタイプミスではない場合:

あなたがパイプを始めたとき
command-not-found -exec 
-bash: -exec: command not found 

答えて

2

-execfindにオプションであり、あなたはすでにコマンドfindを終了しました。

代わりにxargsを試してください。すべてのデータがstdinから取得され、プログラムに追加されます。

テストされていない

find "/xyz" "/abc" "/abc" -printf '%P\n' | sort | uniq -u | xargs rm 
+0

素晴らしいです!出来た。 – Guneet

+0

"/ xyz" "/ abc" "/ xyz" -printf '%P \ n' |並べ替え|ユニーク-u | xargs rm – Guneet

+0

ファイルを削除するのではなく、別のフォルダに移動したい場合、どうすればいいですか? – Guneet

0

すべての234内のファイルと123ディレクトリ-printfでファイル名を取得し、それらを並べ替えるを見つけ、uniqのは、重複のリストを与えるSEDてパスをお返し、重複を削除する123ディレクトリを使用して-dそしてxargsのにファイルを渡す

コマンドRM:

find ./234 ./123 -type f -printf '%P\n' | sort | uniq -d | sed 's/^/.\/123\//g' | xargs rm 

sedのをあなたは./123ディレクトリにあり、検索でのフォルダのフルパスを使用した場合に必要としません。

+0

これはパズルの最後の部分を解決しました、ありがとうEdvin – Guneet

0

別のアプローチ:ちょうどABC内のファイルを検索し、xyzからそれらを削除しようとすると:

テストされていない

find /abc -type f -printf 'rm -f /xyz/%P' | sh 
関連する問題