不過,這個iconv只能拿來轉單一個檔案,並不能直接指定一個資料夾下去遞迴轉換。所有當有大量的檔案需要轉編碼時,就變得有點麻煩了。還好Linux強大的shell指令,可以幫忙解決這個問題,而解決的曙光就來自於find!
find -type f -exec iconv --verbose -f BIG-5 -t UTF-8 {} -o {}.result \; \
-exec mv {} {}.bak \; \
-exec mv {}.result {} \;
以上這段指令分三個階段執行,
- 將目前所在的資料夾的檔案找出,丟給iconv執行轉碼,先將結果暫存至{原檔名}.result
- 將原本的檔案,改名為{原檔名}.bak
- 再將剛暫存的{原檔名}.result,改名稱{原檔名}
iconv的簡介
-l 列出所有支援的編碼格式
-f 要轉換的來源編碼
-t 要轉換的結果編碼
-o 輸出結果的檔案
--verbose 列出處理的檔案名稱
find的簡介
-type [option] 想找出的檔案類型
- f : 正規的檔案
- d : 資料夾
- 所有在exec之後的參數,都會被當成是該command的參數,直到 '\;' 符號出現為止
- 正在處理的檔案名稱,以'{}'取代
%% 奇怪的事又發生了,我是使用Ubuntu,shell是tcsh,直接執行「find -type f -exec iconv --verbose -f BIG-5 -t UTF-8 {} -o {}.result \;」,結果檔並不會產生,真的是很奇怪,一定要三部分一起寫才有用,有高手可以跟我解釋一下嗎>_<