0

状況: 文字エンコーディングが異なる約 20000 個のテキスト ファイル (正確には .csv) がたくさんありfile -i *.csvます。charset=us-asciiutf-16le

目標: それらをすべて同じ方法でエンコードしたいのですが、ここでは us-ascii です。ディレクトリ内の各ファイルのエンコーディングをチェックするワンライナーを考え、それが の場合はutf-16leに変換しus-asciiます。

私は数日前にbashプログラミングを学び始めたばかりなので、これはまだ私を逃れています. 各ファイルで file -i を実行し(そうしました)、戻り値をキャプチャし、指定されたエンコーディングを確認し、それがus-asciiでない場合は変換することは可能ですか?

それを行う方法を理解するのを手伝ってくれてありがとう!

4

3 に答える 3

2

他のソリューションは、ファイルの混合を気にしません。これは、次の意味でソリューションのように聞こえます。

for F in *.csv; do
    if [ `file -i "$F" | awk '{print $3;}'` = "charset=utf-16" ]; then
        iconv -f UTF-16 -t US-ASCII "$F" > "u.$F"
    fi
done

簡単にするのは、最初の数文字 (128 文字) に含まれる us-ascii と utf-16 の識別です。そのため、ファイルが実際に us-ascii である場合、変換によって問題が生じることはありません。

于 2013-05-12T21:15:45.000 に答える
1

これにより、us-ascii でエンコードさ*.csvれていないファイルが us-asciiに変換されます。

#!/bin/bash
for f in *.csv;do
    charset=`file -i README.md |grep -o 'charset=.*'|cut -d= -f2`
    if [ "$charset" != "us-ascii" ];then
      echo "$f $charset -> us-ascii"
      iconv -f "$charset" -t us-ascii < "$f" > "$f.tmp" \
        && mv "$f.tmp" "$f"
    fi
done
于 2013-05-12T21:17:59.263 に答える