拡張子が .JPG または .NEF のファイルを含むディレクトリがあり、ディレクトリ内に X.JPG が存在しない X.NEF 形式のファイルを削除したいと考えています。(ここでの X は任意の文字列です。) 手動で行う以外に、この操作を行う方法がわかりません。
より一般的な状況としては、ディレクトリ A にあり、ディレクトリ B にも存在するすべてのファイルを検索する場合です。(最初の問題は、 を使用して 2 番目の問題に変換できますmmv
。)
答え1
シェルの${var%ext}
パラメータ置換機能を使用して、ファイルごとに元の拡張子を削除できます。例を挙げると、
touch file{1..6}.NEF file{1,2,4,6}.JPG
それから
for nef in *.NEF; do [[ -f "${nef%.NEF}.JPG" ]] || echo rm -- "$nef"; done
結果的に
rm -- file3.NEF
rm -- file5.NEF
説明:
最初のコマンドは、番号が付けられた6 つの.NEF
ファイルと、そのうち 3 つに対応するファイル (つまり、2 番目のコマンドをテストするための空のファイル) を作成します。file1.NEF
file6.NEF
.JPG