はじめに
一般人がWindowsマシン上でエクセルやらワードやらで作ったファイルをもらって、linux上で情報処理を行うシチュエーションは少なからずあるだろう。その際に必要となるであろうデータ変換手順の基本的なところをまとめてみた。
日本語名ファイルをwindowsからlinuxに持ってくる
ここで日本語名ファイルとは、いわゆる全角文字がファイル名に使われているファイルのことである。
windows環境下で作ったzipファイルをLinux環境下で展開
unzip -O cp932 日本語名ファイルを含むアーカイブ.zip
cp932とは、シフトJISにmicrosoftによって拡張が施された文字コード規格である。
参考:
本当は怖くないCP932
シフトJISで書かれたファイル名をUTF-8に変換
convmv -f cp932 -t utf-8 * --notest
ubuntuの場合convmv
コマンドはデフォルトでは導入されていないので、事前にapt install convmv
しておく必要がある。
日本語名のファイルがzipからlinux上で「標準的な」手順で展開されてしまうと、不適切に文字化けした状態でUTF-8化されてしまうようで、そのあとでconvmvしようとしても「処理済み」と素気無く断られてしまう。あきらめて元zipファイルから上記手順で展開をやり直すしかない。
文字コードと改行を変換する(シフトjis→UTF-8およびCRLF→LF)
シフトjisのテキストをUTF-8に変換し、さらに改行コードをwindowsの標準であるCR/LFからLFに変換し、結果を新しいファイルに書き出す。
iconv -f cp932 -t utf-8 対象ファイル名 | sed 's/\r//g' > 出力先ファイル名
カレントディレクトリ中の全ファイルを一度に処理する方法も考えてみた。変換後の内容はサブディレクトリutf8
に同名のファイルを作って書き出すことにしよう。bashのループ処理を利用する。
#!/bin/bash
[ -d utf8 ] || mkdir utf8
for a in *
do iconv -f cp932 -t utf-8 $a | sed 's/\r//g' > utf8/$a
done