そのJPEGファイルなしでRAWファイルを削除するBashスクリプト

そのJPEGファイルなしでRAWファイルを削除するBashスクリプト

カメラをRAW / JPEGモードで撮影しますが、RAW画像は容量が大きく(ファイルサイズ)プレビューに時間がかかりますので、JPEGでプレビューして望まないものは削除します。

たとえば、次のような場合があります。

image1.CR2
image1.jpg
image2.CR2
image2.jpg
image3.CR2
image4.CR2
image5.CR2
...

.CR2一致しない項目.jpg(この例では画像3〜5)を削除したいと思います。

次のコードが見つかりました。

rm *.CR2(e:'[[ ! -e ${REPLY%.CR2}.jpg ]]':)

しかし、私のコンピュータでは動作しません。私はドンキーで働いている間にバッシュに触れたことがなかったので、バッシュを見つけようとしたときにパニックになりました。

エラーが発生します。

-bash: syntax error near unexpected token `('

誰もが正しい方向に私を指すことができますか?

答え1

ループを使用してください。

for x in *.CR2
do
    [ -e "${x%.CR2}.jpg" ] || echo rm "$x"
done

各ファイルを見て.CR2呼び出しますx${x%.CR2}.CR2削除されたファイル名に展開されます。、拡張子を追加して.jpg存在することを確認します。そして-e。そうでない場合は、元のファイルを削除します.CR2

echo実際には、何も削除する前に目的のファイルが選択されていることを確認できる追加機能があります。必要に応じて、すべての内容を1行に入れることができます。

for x in *.CR2 ; do [ -e "${x%.CR2}.jpg" ] || echo rm "$x"; done

そしてインタラクティブに簡単に編集できます。

一部のシェルにはこれを実行できるより強力なパラメータ拡張機能がありますが、Bashはそのうちの1つではありません。あなたが見つけたコードは、次のいずれかについてのようです。

関連情報