同じ名前だが拡張子が異なるファイルを検出するにはどうすればよいですか?

同じ名前だが拡張子が異なるファイルを検出するにはどうすればよいですか?

拡張子が .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.NEFfile6.NEF.JPG

関連情報