2016-09-01 6 views
2

/Dir2に存在しない/Dir1のファイルを削除しようとしています。問題は、最初の数文字は一致しますが、最後の数文字は一致しません。例えば。ファイルの末尾が一致しない場合

/Dir1 
abc_def.png 
xyz_xyz.png 

/Dir2 
abc_ghi.png 

「abc」が一致する限り、最後の数文字が異なっていてもファイルを削除したくありません。削除したい唯一のファイルは/Dir2に存在しないため、xyz.pngです。これをどうやってやりますか? rmechoを削除し、

cd /Dir1 

for f in *_*; do 
    [[ -f /Dir2/"${f%%_*}"* ]] || echo rm "$f" 
done 

一度満足:

+2

代わりに '/ Dir2'に' ghi_abc.png'というファイルがあったらどうなりますか? '/ Dir1'の' abc_def.png'は削除されませんか? –

+0

正解ですが、削除されません。最初の3文字に依存してほしい。 – kkd92

+0

'/ Dir1'のファイルのアンダースコアの前に、ファイル名の最初の部分に依存していますか? –

答えて

1

、あなたはこのコードを使用することができますが、最初のアンダースコアの前に(あなたの例のように)ファイル名の一部に一致するようにしたいと仮定。

+0

'd %%'は何を表していますか?それはキャラクターが何であれ、プレースホルダーのようなものですか? – kkd92

+0

'$ {f %% _ *}'は '$ f'から最初のアンダースコアの後で最も長い部分を削除します – anubhava

+0

いいえ、すべてのファイルがエコーされました。 – kkd92

関連する問題