綾小路龍之介の素人思考

[linux] ファイルやディレクトリの文字化けをconvmvで修正

メール添付された圧縮ファイルに含まれるファイルやディレクトリの名前がshift jisになっていた。展開されたファイルやディレクトリにアクセスするのが面倒なので、convmvで再帰的にファイル名、ディレクトリ名を変換。

aptitudeでconvmvパッケージを検索、インストール。

# aptitude search convmv
p   convmv         - filename encoding conversion tool
p   fuse-convmvfs  - mirrors a whole filesystem tree from one charset to another
# aptitude install convmv
The following NEW packages will be installed:
  convmv
0 packages upgraded, 1 newly installed, 0 to remove and 1 not upgraded.
Need to get 20.1 kB of archives. After unpacking 90.1 kB will be used.
Get:1 http://ftp.jp.debian.org/debian/ squeeze/main convmv all 1.12-2 [20.1 kB]
Fetched 20.1 kB in 0s (29.6 kB/s)
Selecting previously deselected package convmv.
(Reading database ... 71151 files and directories currently installed.)
Unpacking convmv (from .../archives/convmv_1.12-2_all.deb) ...
Processing triggers for man-db ...
Setting up convmv (1.12-2) ...

テスト用ディレクトリとファイルの作成。

$ mkdir -p `echo "テスト/テスト/テスト" | nkf --sjis`
$ touch `echo "テスト.txt" | nkf --sjis`
$ touch `echo "テスト/テスト.txt" | nkf --sjis`
$ touch `echo "テスト/テスト/テスト.txt" | nkf --sjis`
$ ls -R
.:
?e?X?g  ?e?X?g.txt

./?e?X?g:
?e?X?g  ?e?X?g.txt

./?e?X?g/?e?X?g:
?e?X?g  ?e?X?g.txt

./?e?X?g/?e?X?g/?e?X?g:

変換が成功するか確認するには、--notestオプションをつけないでconvmvを走らせる。実際にリネームする場合は--notestをつけて走らせるとメッセージが表示される。今回はsjisのファイル名をutf8のファイル名に変換するので、-f sjis -t utf8。再帰的に変換を行いたいので、-r。上手く変換できている様子。

$ convmv -r -f sjis -t utf8 *
Your Perl version has fleas #37757 #49830
Starting a dry run without changes...
mv "�e�X�g/�e�X�g.txt"  "�e�X�g/テスト.txt"
mv "�e�X�g/�e�X�g/�e�X�g.txt"   "�e�X�g/�e�X�g/テスト.txt"
mv "�e�X�g/�e�X�g/�e�X�g"       "�e�X�g/�e�X�g/テスト"
mv "�e�X�g/�e�X�g"      "�e�X�g/テスト"
mv "./�e�X�g"   "./テスト"
mv "./�e�X�g.txt"       "./テスト.txt"
No changes to your files done. Use --notest to finally rename the files.

--notestオプションをつけて走らせ、変換結果を再確認。上手く変換できていることがわかる。

$ convmv -r -f sjis -t utf8 --notest *
Your Perl version has fleas #37757 #49830
mv "�e�X�g/�e�X�g.txt"  "�e�X�g/テスト.txt"
mv "�e�X�g/�e�X�g/�e�X�g.txt"   "�e�X�g/�e�X�g/テスト.txt"
mv "�e�X�g/�e�X�g/�e�X�g"       "�e�X�g/�e�X�g/テスト"
mv "�e�X�g/�e�X�g"      "�e�X�g/テスト"
mv "./�e�X�g"   "./テスト"
mv "./�e�X�g.txt"       "./テスト.txt"
Ready!
$ ls -R
.:
テスト  テスト.txt

./テスト:
テスト  テスト.txt

./テスト/テスト:
テスト  テスト.txt

./テスト/テスト/テスト:

リファレンス

  1. Linuxでの文字化けと文字コード変換 » Linuxで自宅サーバ構築(新森からの雑記)
  2. Linuxでファイル名の文字コードを変換する(文字化けを直す):while(1) { ;}:So-netブログ
  3. Linux 日本語 文字化け ディレクトリ移動 ファイル名 samba

ソーシャルブックマーク

  1. はてなブックマーク
  2. Google Bookmarks
  3. del.icio.us

ChangeLog

  1. Posted: 2010-03-16T00:16:45+09:00
  2. Modified: 2010-03-16T00:16:45+09:00
  3. Generated: 2017-02-06T23:09:17+09:00