Help us understand the problem. What is going on with this article?

テキストファイルを一括でiconv

More than 5 years have passed since last update.

あるディレクトリ以下のテキストファイルを一括でiconv

バイナリのファイルでもおかまいなしにiconvしちゃうのがなんとなく嫌だったのと、拡張子とかで絞るのが嫌だったのでした。いつもはforとかで回してやってたけど、一撃で倒そうと思っているうちに結局まわりくどい感じになったなあ。
ちなみに ubuntu 3.8.0-19 にて実行。

例: hogeディレクトリ以下のテキストファイルをすべてEUC-JPからUTF-8に変換して上書き

find hoge -type f | xargs file | grep  ":.*text" | cut -d: -f1 | xargs -t -I{} iconv -f EUC-JP -t UTF-8 {} -o {}

解説

find hoge -type f
hogeディレクトリ以下のファイルのみをfind


xargs file
findで見つけたファイルの種類を表示


grep ":.*text"

テキストファイルのみを抽出。
ファイル名にtextを含むケースを考慮して:(コロン)以降で探している。
バイナリファイルだけを見つけたい(テキストファイル以外をバイナリとするのであれば)場合には、以下のようにすればよい。

find hoge -type f | xargs file | grep -v  ":.*text" | cut -d: -f1

cut -d: -f1
特定したファイルのパスのみを抽出。
区切り文字を:(コロン)として1フィールド目を抽出している。


xargs -t -I{} iconv -f EUC-JP -t UTF-8 {} -o {}

  • -t 実行したコマンドを表示するオプション。確認用なのでなくてもよい。
  • -I{} xargsの引数を変数のようにして使う。{} としたが、好きな文字列でよい。
  • -f EUC-JP -t UTF-8 EUC-JP から UTF-8 に変換。iconv -lで文字コード一覧を確認できる。

注意

変換して上書きしてしまうので、失敗したとき戻せるようにディレクトリまるごとコピーして作業するのがオススメ。
同じディレクトリに対して立て続けに何度も実行しないこと。iconvのfromとtoがわけのわからないことになるよ。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away