• ベストアンサー

UNIX上で文字コードの一括変換はできますか?

UNIX上で、文字コードを変換したいのですが、今まではSJISからEUCといった変換にnkfを使用してきましたが、nkfだと1ファイル毎でしか文字コードを変換できませんでした。1行のコマンドでそのディレクトリ内の全てのファイルの文字コードを変換してくれるコマンドはありますでしょうか? UNIX上で実現できれば、Perlでもなんでも結構です。よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • retr
  • ベストアンサー率75% (30/40)
回答No.1

for filename in *; do nkf -Se $filename > $filename.euc; mv $filename.euc $filename; done と一行で打てばできるかと。

matchori
質問者

お礼

コマンドラインで、for文等が使えるとは思っていませんでした。素晴らしいテクニックありがとうございました。

その他の回答 (1)

  • systemv
  • ベストアンサー率66% (2/3)
回答No.2

Perlそのものには文字コードの識別機能が無いので、jcode.plや、Jcode.pmを使うことになります。 (最新の5.8では標準モジュールEncode.pmでできるようですが、まだ環境としてはレア) なので、シェルでやるのがベストでしょう。 シェルの種類は難ですか?cshならforeachなども使えますが、#1さんの答えが無難でしょうか。 ちなみに、nkfを-Seで実行すると、一度変換済みのeucファイルが文字化けしてしまいます。(SJISとして読みこむため)なので、-eだけつけることお勧めします。 for file in * do nkf -e $file > $file.euc mv $file $file.old mv $file.euc $file done ちなみに、こっちは各行で改行を入れてください。

関連するQ&A