マジックファイルの助けを借りてファイルタイプを検出し、それに応じてファイルサフィックスの名前を変更します

マジックファイルの助けを借りてファイルタイプを検出し、それに応じてファイルサフィックスの名前を変更します

接尾辞のないさまざまなファイルを含むフォルダー (iPhone バックアップ) があります。

これらのファイルに対してバッチ処理を実行し、各ファイルのファイルタイプを検出します(マジックファイルデータベース(/usr/share/misc/マジックまたはmanファイル) を選択し、それに応じてファイルサフィックス (データベース ファイル/MIME タイプ <-> サフィックスから) を自動的に変更/名前変更します。

関連するキーワード「ファイル」、「マジック」、「名前変更」などの一般的な性質のため、何時間も Google 検索や StackExchange 検索を行っても結果は得られませんでした。助けていただければ幸いです。

答え1

タイプ<->サフィックスDBはどのようになっていますか?fileの出力を解釈するのはそれほど簡単ではありません。私は次のように仮定します: * ファイルが出力する最初の単語で十分です * この単語は、各行に:が含まれ、値が必要なサフィックスであるファイル内のキーです

bash の場合、ファイル タイプを引数として受け取り、サフィックスをエコーする関数を作成します。

MISTERIOUSFILEMIMETYPETOSUFFIXDB=/path/to/key/value/file

typetosuffix () {
    grep -E "^\s*$1:" ${MISTERIOUSFILEMIMETYPETOSUFFIXDB}| cut -d : -f 2
}

この機能を使えば

for f in $(find /path/to/iphone/backup -type -f)
do
    FILEWITHOUTSUFFIX = basename $f
    [ ${FILEWITHOUTSUFFIX} = ${FILEWITHOUTSUFFIX%.*} ] && continue #the file has a suffix after all
    TYPE=$(file $f | cut -f 2) #put type determining magic here
    SUFFIXITSSUPPOSEDTOHAVE=$(typetosuffix $TYPE) #fetch suffix from DB
    mv $f $f$SUFFIXITSSUPPOSEDTOHAVE #rename the file
done

関連情報