LoginSignup
3
4

More than 3 years have passed since last update.

Windows→linux データ持ち込みの勘所

Last updated at Posted at 2020-02-20

はじめに

一般人が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  
3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4