ディレクトリ内のすべてのファイルに対して一貫したエンコーディングを取得します。

ディレクトリ内のすべてのファイルに対して一貫したエンコーディングを取得します。

2つの異なるエンコーディングを使用する複数のベンダーのcsvファイルを含むディレクトリがあります。

  • ASCIIテキスト/UTF-8
  • UCS2/UTF-16リトルエンディアン

私は従来の構文を使用してこれらのデータファイルにgrep、awk、sed、およびその他のユーティリティを使用したいと思います。

これらのファイルをUTF-16からUTF-8に記録しても、有用なデータは失われません。すべてのcsvファイルにはASCIIデータしか含まれていないため、一部のベンダーがリトルエンディアンUTF-16にファイルを提供する理由を理解できません。

出力を解析するために短いスクリプトを書いていますが、file非常に脆弱であると思います。

複数のエンコーディングでファイルを管理するより良い方法が必要です。この種の問題を解決するのに役立つプログラムやユーティリティはありますか?

私はDebianの安定版を使用しています。

for f in ./*.csv
do
  if  [[ $(file "$f") == *"UTF-16"* ]]
  then
    iconv -f UTF-16 -t UTF-8 "$f" > "$f"-new
    mv "$f"-new "$f"
  fi
done

ベストアンサー1

スクリプトを次のように改善します。

set -o noclobber
for f in ./*.csv
do
  if [ "$(file -b --mime-encoding "$f")" = utf-16le ]; then
    iconv -f UTF-16 -t UTF-8 "$f" > "$f"-new &&
      mv "$f"-new "$f"
  fi
done

おすすめ記事