質問: 正しいファイル拡張子 さまざまなファイルタイプの画像が約12000個ありますが、それらはすべて* .jpgという名前に変更されました。今、私は彼らに適切な拡張子を返したいです、どうすればいいですか
回答: あなたはbashで比較的簡単にそれを行うことができます:for f in *jpg; do type=$(file -0 -f" " "$f" | grep -apo '\0\s*\k\s+') mv "$f" "${f%%.*}.${type,,}" done これは@ a.bの答えと同じ考え方ですが、findの代わりにシェルグロブを使用しています。 ${f%%.*}は、拡張子のないファイル名です。 fileコマンドの-0は、grepに使用するファイル名の後に\0を出力します。これは、スペース、改行などを含む任意のファイル名で機能するはずです。 ${type,,}は、小文字の拡張子を取得するためのトリックです。 pngをpngに変換します。あなたは質問で言っていませんでしたが、これを再帰的にしてサブディレクトリに降りる必要がある場合は、代わりにこれを使用できます:shopt -s globstar for f in **/*jpg; do type=$(file -0 -f" " "$f" | grep -apo '\0\s*\k\s+') mv "$f" "${f%%.*}.${type,,}" done shopt -s globstarは、**がサブディレクトリに一致するようにするbashのglobstarオプションを有効にします。 グロブスター 設定されている場合、パス名拡張コンテキストで使用されるパターン**は、すべてのファイルと0個以上のディレクトリとサブディレクトリに一致します。パターンの後に/が続く場合、ディレクトリとサブディレクトリのみが一致します。