カメラを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つではありません。あなたが見つけたコードは、次のいずれかについてのようです。