LinuxでMIMEタイプに基づいてファイルを削除する

LinuxでMIMEタイプに基づいてファイルを削除する

私はLinuxを初めて使用していますが、MIMEタイプに基づいてファイルを削除するのに問題があります。現在、私のLinuxシステムにはファイルセットがあり、以下にいくつかのタイプが選択されています。

0FiTahKc: M3U playlist, ASCII text, with very long lines, with CRLF line terminators
0FJsEpTc: ASCII text, with CRLF line terminators
0fKPkmwe: ASCII text, with CRLF line terminators
0FLR6MWB: ASCII text
0FMa2xL2: C source, ASCII text, with CRLF line terminators
0fN8DDbf: exported SGML document, ASCII text, with very long lines, with no line terminators
0fSM3YyG: ASCII text, with CRLF line terminators
0fTXKtZD: UTF-8 Unicode text, with CRLF line terminators
0FUcusxr: ASCII text, with CRLF line terminators

ディレクトリ内のさまざまな種類のファイルを調べましたが、結果は次のとおりです。

$ find -type f -exec file {} \; | sed 's/^.*: //' | sort -u

ASCII text
ASCII text, with CRLF line terminators
ASCII text, with no line terminators
ASCII text, with very long lines, with CRLF line terminators
ASCII text, with very long lines, with no line terminators
C source, ASCII text, with CRLF line terminators
exported SGML document, ASCII text, with very long lines, with no line terminators
M3U playlist, ASCII text, with very long lines, with CRLF line terminators
M3U playlist, UTF-8 Unicode text, with CRLF line terminators
UTF-8 Unicode text, with CRLF line terminators

「C Source」、「M3U Playlist」、「SGML」などにgrepを使用するか、Findを使用してディレクトリからファイルを削除します(最初の5行のASCIIタイプを除く)。これらのファイル形式のさまざまな種類をパイプして削除できる実行可能なコマンドまたはスクリプトを探しています。

ベストアンサー1

いくつかのツールを1行にまとめてください。

  • 質問に示すように、各ファイルのMIMEタイプを使用してfindリストします。files
  • awkタイプに基づいてリストをフィルタリングするために使用されます。
  • xargsフィルタリングされたリストと各ファイルをインポートするために使用されますrm

echo何もしないように最初に使用することをお勧めします。rmこれにより、コマンドが乾燥して実行され、どのファイルが削除されるかを確認できます。

例:「Cソース」を削除します。

find . -type f -exec file {} + | awk -F: '$(NF) ~ "C source" {print $1}' | xargs echo rm

その後、同じ行削除を実行してecho実際にファイルを削除します。


awkを使用したフィルタリングを説明するために、このセクションではawkに$(NF) ~ "C source"2番目の列(a以降のすべての項目):に含まれるすべての行と一致するように指示しますC source。この条件は必要に応じて拡張できます。したがって、最も確実に以下を検索またはC Source使用M3U playlistできます。

$(NF) ~ "C source" || $(NF) ~ "M3U playlist"

例:

find . -type f -exec file {} + | awk -F: '$(NF) ~ "C source" || $2 ~ "M3U playlist" {print $1}' | xargs echo rm

おすすめ記事