概要
ファイルの中身ではなく、「ファイル名」自体の文字コードを変換するためのコマンドです。
Windows (Shift_JIS/CP932) やMac (UTF-8 NFD) で作成されたファイルをLinux (UTF-8 NFC) に転送した際に発生する、「ファイル名の文字化け」を解消するのに特化しています。また、ファイル名の大文字・小文字を一括変換する機能も備えています。
※標準ではインストールされていないことが多いため、以下のコマンド等で追加する必要があります。
sudo apt install convmv または sudo dnf install convmv
仕様(引数・オプション)
構文
convmv [オプション] -f [変換元コード] -t [変換先コード] [ファイル名/ディレクトリ名...]
主な引数・オプション
| オプション | 説明 |
| -f [コード] | 変換元の文字コードを指定します(from)。例: shiftjis, utf8 |
| -t [コード] | 変換先の文字コードを指定します(to)。例: utf8 |
| –notest | 実際にファイル名を変更します(デフォルトはテストモードで表示のみ)。 |
| -r | ディレクトリを再帰的にたどって処理します。 |
| -i | 変換時に同名ファイルが存在する場合、上書き確認を行います(interactive)。 |
| –list | サポートしている文字コードの一覧を表示します。 |
| –replace | ターゲットファイルが既に存在する場合、上書きします。 |
| –upper | ファイル名をすべて大文字に変換します。 |
| –lower | ファイル名をすべて小文字に変換します。 |
| –exec [コマンド] | 変換が成功したファイルに対して、指定したコマンドを実行します。 |
基本の使い方
まずはオプションを指定せず、**「テストモード(Dry Run)」**で変換結果をシミュレーションします。convmv は安全のため、デフォルトでは実際の変更を行いません。
Windowsから持ってきた文字化けファイル(Shift-JIS)がある想定です。
# まずはテスト実行(--notest無し)で、どう変わるか確認
convmv -f shiftjis -t utf8 win_data_?????.txt
実行結果例
Starting a dry run without changes...
mv "./win_data_ƒeƒXƒg.txt" "./win_data_テスト.txt"
No changes to your files done. Use --notest to finally rename the files.
変更後のファイル名が正しく読めていることを確認したら、--notest を付けて実際に変換します。
# 実際にファイル名を変更
convmv -f shiftjis -t utf8 --notest win_data_?????.txt
実践コマンド
ディレクトリ以下の全ファイルをShift-JISからUTF-8に変換
再帰的に処理する -r オプションを使い、フォルダごとのアップロードデータなどを一括修正します。
# public_html ディレクトリ以下の全ファイルを対象に変換
convmv -r -f shiftjis -t utf8 --notest public_html/
ファイル名をすべて小文字(または大文字)に統一する
Webサーバーでの公開時など、大文字・小文字の混在トラブルを防ぐために統一する場合に使用します。文字コードの指定は不要です。
# カレントディレクトリの全ファイル名を小文字に変換
convmv --lower --notest *
# 特定のファイルを大文字に変換
convmv --upper --notest index.html
実行結果例(小文字化)
mv "./README.TXT" "./readme.txt"
mv "./Image.PNG" "./image.png"
Ready!
カスタムポイント
- 文字コードの確認 (–list)使用できるエンコーディング名は正確に指定する必要があります。リストから grep で探すと確実です。Bash
convmv --list | grep -i jis # shiftjis, euc-jp, iso-2022-jp 等が表示される - 上書き確認 (-i)変換の結果、既存のファイルと同名になってしまう場合に備え、慎重に作業したい場合は -i を付けます。Bash
convmv --lower -i --notest *
注意点
- デフォルトは変更しないconvmv は –notest オプションを付けない限り、絶対にファイル名を変更しません。「コマンドを打ったのに変わらない」というときは、このオプション忘れが原因です。2. ファイルの中身は変わらないこのコマンドはあくまで「ファイル名(メタデータ)」を書き換えるツールです。テキストファイルの中身の文字コード変換には iconv や nkf を使用してください。
- 不可逆な操作一度文字コードを変換してしまうと、元のコードが何だったか分からなくなる場合があります。重要なデータはバックアップを取ってから操作してください。
応用
Mac (NFD) の濁点分離ファイルをLinux (NFC) 用に修正する
Macで作成したファイル(「カ」と「゛」が分かれるNFD形式)を、LinuxやWindowsで標準的なNFC形式に結合します。文字化けではありませんが、検索などで不具合が出る場合に有効です。
# UTF-8からUTF-8への変換とし、NFC正規化オプション(--nfc)を使用
convmv -r -f utf8 -t utf8 --nfc --notest /mnt/mac_disk/
まとめ
convmv は、OS間のファイル転送で必ずと言っていいほど発生する「ファイル名文字化け問題」の特効薬です。
「まずはオプションなしで確認し、–notest で確定させる」という2段階の安全装置があるため、安心して利用できます。Webサーバーへのデプロイ前や、古いファイルサーバーの移行時に活用してください。
