MIMEタイプに応じてファイルを削除する方法は?

MIMEタイプに応じてファイルを削除する方法は?

(こんにちは皆さん!ここに初めて文を載せるので、皆さんに特に挨拶します。)

.webpや.pngイメージなどのフォルダやサブフォルダのMIMEタイプに基づいてファイルを削除するコマンドを使用したいと思います。私のコンピューティングの知識はほぼゼロですが、拡張機能に基づいて削除しました。

まず、目的のフォルダに移動します。

cd /my-folder

それから:

find \( -iname "*.webp" -o -iname "*.png" \) -print0 | xargs -0 rm -f

誰かがすでに別のフォーラムで回答していて、コマンドは機能しますが、70個のファイルに対して10秒ほど遅くて使用できません。

while read -d '' Fichier
do
  MimeType=$(mimetype --output-format %m "$Fichier") 
  [[ "${MimeType}" == @(image/webp|image/png) ]] && echo rm "$Fichier"
done < <(find . -type f -print0)

これは本当に「簡単な」作業のようです...

ベストアンサー1

exiftool特定のMIMEタイプで識別されたファイルを報告するために使用できます。

exiftool -q -r. -ext '*' -if '
  print "$FilePath\0" if $MIMEType =~ m{^image/(webp|jpeg)$}; 0' . |
  xargs -r0 echo rm

echo正しく表示されたら削除)

  • -q:静かな
  • -r.:再帰検索(隠しディレクトリを含む)(ディレクトリへのシンボリックリンクに従います!)
  • -ext '*':既知の拡張子を持つファイルを制限しないでください。
  • -if 'perl code':コードがtrueを返すファイルに関する情報のみを報告します。ここでは、;0NULで区切られたファイルパスを印刷しようとしてprintコードを呼び出してこれを行うため、ファイルが選択されないようにreturn falseを追加します。これにより、-if '$MIMEType eq "image/webp"' -s3 -FilePath改行で区切られたパスが印刷されます。改行はファイルパスのすべての文字と同じくらい有効であるため、後で確実に処理することはできません。

あるいは、exiftoolファイル自体を削除することもできます。

exiftool -q -r. -ext '*' -if '
  if ($MIMEType =~ m{^image/(webp|jpeg)$}) {
    print STDERR "Deleting $FilePath\n";
    unlink $FilePath or print STDERR "Failed: $!\n";
  }
  0' .

おすすめ記事