當整個目錄裡面都是 Big5 的檔案, 然後要全部轉成 UTF-8 的時候, 想到就很累, 這就是當初要把 Terminal 都轉換成 UTF-8 其中一個障礙.
不過那時候找到一隻 script, 程式寫法大概就是 echo 現在的檔名, 然後用 iconv 轉成 UTF-8, 再 mv 把檔名換掉.
程式如下: (已不知來源為何, 若有人知道, 還請告知此程式來源, 將立即補上)
#!/bin/sh
# this script changes big5 chinese file/directory name to utf8 file/directory name.
# It will recursive.
# it can handle the file name containing space.
# when you use this script, please change to the directory that you want to transfer files' name.
# then execute like "~/ic2"
# i hope this script will not impact anything that will crash your system.
# this script works fine for me.DIR="."
for I in * ; do
echo "check... $I"
f=`echo "$I" | iconv -f big5 -t utf8`
if [ $? = 0 ]; then
if [ "$I" != "$f" ];then
echo "$f"
# cp -rv "$I" ~/cbackup/
mv -v "$I" "$f"
if [ $? = 0 ];then
rm -rfv ~/cbackup/"$I"
else
echo "$f"
exit 1;
fi
else
echo "skip $I"
fi
else
echo "skip $I"
fi
done
echo "ok!"#following from cynosure
for J in * ; do
if [ -d "$J" ]
then
path=`pwd`
echo "dir ""$J" #where am i
cd "$path""/""$J"
~/bin/ic2
cd "$path"
fi
done
ls *
exit 1;
此 script 我有做過一些修改, 會直接執行, 不會進行備份或測試的動作, 所以建議不熟先不要亂玩.. 😛
我有另外將此 script 再 cp, 主要是來做還原等等的 script, 主要都是 copy 後修改 iconv, 來做事後處理, 例如:
- iconv -f big5 -t utf8
- iconv -f utf8 -t big5
- iconv -f gb2312 -t utf8
- iconv -f utf8 -t gb2312
不過現在有另外一隻更方便的程式囉~ 就是下述:
這隻主要是隻 Perl script, 該做 轉換/備份/測試/偵測環境 等等, 都寫的蠻完整的.
convmv 轉換編碼指令
- convmv -f big5 -t utf-8 -r --notest *
- -f big5: 從 Big5 編碼轉換 (不過標準應該是要寫 big5-eten, 但是我測試 big5 也可以動. :P)
- -t utf-8: 轉換編碼到 UTF-8
- -r: 遞迴的將目錄下的所有檔名都做轉換
- --notest: 如果不下這個, 一切動作都只是測試, 會直接將轉換前和轉換後的檔名列給你看, 這加下去, 才會實際轉換檔名.
- *: 所有檔案
其他參數
- --list : 列出所有可用的編碼
- --unescape : 轉換檔名中 %xx 這種 16 進位的編碼 (mv "./a%20x.jpg" "./a x.jpg")
- --lower : 將所有檔名都轉小寫(ex: convmv --lower LOWER.txt)
- --upper : 將所有檔名都轉大寫
- -i : 互動模式, 轉換前會先經過 y/n 確認
- 更多詳細可 man convmv 或 convmv --help, 除此之外, 可以另外再搭配 rename 做些其他應用~ 🙂
Hi, 您好:
雖然不曉得這個問題在這邊問適不適合,
但是剛好搜尋到 iconv 看到您的文章,
想請教您,隨身碟的 LABEL 名稱如果是中文,
在 linux 下可以正常顯示嗎?
我用 ntfslabel /dev/sda1 查詢 label 名稱,
如果我隨身碟的 LABEL 是中文,
例如:測試_8G,
則查詢後的結果為 ____8G。
因為我不曉得 ntfslabel 查詢後顯示出來的字串是 Unicode or Big5 or ...,
我想說用 iconv 試著 big5 -> utf-8,
但是都不成功。
所以想請教您是否有何建議?
謝謝
厄, 我的隨身碟, 沒有這個問題耶.
還是你把 Label 改為英文就好了? 或者 mount 時加 iocharset=cp950 這個參數試試?