JPGファイルのないすべてのRAW画像ファイル(写真画像)を削除したいです。
私の現在のワークフローは次のとおりです。
- 私のカメラは、私が撮影したすべての写真に対してRAWとJPGを生成します。
- JPGファイルを見て不要なファイルを削除します(JPGがはるかに高速にロードされるため)。
- 私は現在のフォルダを手動で見て、JPGペアのないRAWファイル(私の場合は* .cr3)を選択します(レビュー中にJPGを削除したため)。
ファイルを表示する前のファイルの外観例:
IMG_001.JPG
IMG_001.CR3
IMG_002.JPG
IMG_002.CR3
IMG_003.JPG
IMG_003.CR3
IMG_004.JPG
IMG_004.CR3
ファイルを確認した後のファイルの表示方法の例
IMG_001.JPG
IMG_001.CR3
IMG_002.CR3
IMG_003.JPG
IMG_003.CR3
IMG_004.CR3
IMG_002とIMG_004の両方にjpgファイルがありません。つまり、jpgファイルを削除し、元のファイルを削除したいと思います。
私はアドバイスに従ってください。ここ:そしてここ:しかし役に立たない。
これは私の現在のコードです。
for files in RAW/*
do
test="JPG/$(basename ${files::9})JPG"
if [ ! -f "$test" ]
then echo "$files"
fi
done
または流暢な一行バージョン:
for files in RAW/*; do if [ ! -f "JPG/$(basename ${files::9})JPG" ]; then echo "$files"; fi done
または他のライナー:
For files in RAW/*; [ ! -f "JPG/$(basename ${files::9})JPG" ] && echo "JPG/$(basename ${files::9})JPG"
コードでは、生ファイルとjpgファイルが異なるフォルダにあると仮定します。これは問題ありません。しかし、同じフォルダに置くのはもう少し便利です。
基本的にこのスクリプトを書く方法を知りたいです。私はMac OSX 15 Catalinaで端末を使用しています。
答え1
ファイルが同じディレクトリにあるので、簡単に保ちましょう。
#!/bin/sh
for file in *.CR3; do
noext=${file%.CR3}
[ -f "$noext.JPG" ] || rm -- "$file"
done
.CR3
このスクリプトは現在のディレクトリのすべてのファイルを繰り返します。ファイル名から拡張子を削除しますnoext=${file%.CR3}
。.JPG
そのエントリがない場合、.CR3
ファイルは削除されます([ -f "$noext.JPG" ] || rm -- "$file
)。
echo
実際にスクリプトを実行する前に正しく実行されたことを確認するには、間に1つを追加する必要があります。||
rm
答え2
ファイルが作成したとおりであれば、以下を使用して必要なすべてのファイルを見つけることができます。
\ls -1 *.JPG *.CR3 | cut -d. -f1 | uniq -c | sed '/\<2\>/d
s/^[^I]*\(.*\)/\1.CR3/'
削除してください。完全なコマンドは次のとおりです。
rm $(\ls -1 | cut -d. -f1 | uniq -c | sed '/\<2\>/d
s/^[^I]*\(.*\)/\1.CR3/')
実際には、各ファイルのデフォルト名を取得してcountにcut
送信しuniq -c
、2つのインスタンスを持つすべてのファイルを削除してから、1つのインスタンスを削除して拡張子を追加することでこれを行うことができますCR3
。