jpg ファイル属性でフィルタリングするシェルスクリプト

jpg ファイル属性でフィルタリングするシェルスクリプト

私は何千ものjpgファイルをフィルタリングし、特定のプロパティ(写真をキャプチャしたカメラブランドなど)を持つファイルのみを維持する方法を見つけようとしています。どうすればいいですか?

答え1

抽出するツールにはいくつかあります。EXIFEXIFデータに基づいてデータを処理し、画像ファイルを操作することもできます。

そしてエクスポートツール、EXIF属性に基づいてファイル名を変更できます。特に、特定のEXIF属性で指定されたサブディレクトリにファイルを簡単に送信できます。その後、結果を確認し、興味のないファイルを含むディレクトリを削除できます。

exiftool  '-Directory<${Model}/%d' -r .

Exiftoolを使用するとこれは簡単ですが、説明のためにEXIF属性を使用してjpegファイルをサブディレクトリにソートするシェルフラグメントがあります。エキシプ。属性値に文字を含めることはできません/-tを実行してオプション番号を確認できますexif -l

for f in *.jpg; do
  v=$(exif -m -t 0x0110 -- "$f" 2>/dev/null)
  if [ -n "$v" ]; then
    mkdir -p -- "$v"
    mv -- "$f" "$v"
  fi
done

そしてExiv2v=…対応する行をに置き換えますv=$(exiv2 -g Exif.Image.Model -Pv -- "$f")

ファイルがディレクトリツリーに設定されている場合は、を呼び出してfindディレクトリツリーを再帰的に巡回します。すべての画像がというディレクトリの下にあるとしますunknown。次のコードスニペットは、各イメージモデルのディレクトリを作成し、ファイルをコピーして元のディレクトリ階層をミラーリングします。

find unknown -name '*.jpg' -exec sh -c '
    v=$(exif -m -t 0x0110 -- "$f" 2>/dev/null)
    [ -n "$v" ] || exit
    d=${0#*/}; d=${d%/*}
    mkdir -p -- "$v/$d"
    mv "$0" "$v/$d"
' {} \;

関連情報