linux下, 使用iconv命令實現檔案目錄編碼批量轉換
阿新 • • 發佈:2019-01-23
意圖:
經常遇到檔案編碼轉換的問題, 特別是檔案目錄批量轉換, 不想一個一個的轉, 所以寫了個shell指令碼, 一勞永逸
指令碼適用環境:
linux環境, 並且可以使用iconv命令, 如果沒有iconv命令, 可以通過編譯iconv原始碼來安裝
附shell指令碼:
if [ $# != 4 ] then echo -e "\n指令碼需要四個引數" echo -e " 引數1: 原始編碼格式\n 引數2:目標編碼格式\n 引數3: 待轉碼的檔案目錄\n 引數4: 轉碼後的檔案目錄\n" echo -e "示例: icon.sh from_encoding to_encoding in_dir out_dir\n" exit else FROM_ENCODING=$1 TO_ENCODING=$2 IN_DIR=$3 OUT_DIR=$4 fi #引數:兩個引數, 輸入目錄和輸出目錄 #功能:使輸出目錄中目錄樹與輸入目錄相同 function create_outDirTree() { in_dir=$1 out_dir=$2 for dir in `find $in_dir -type d` do sub_dir=`echo $dir|awk -F "$in_dir" '{print $2}'` new_dir=${out_dir}/$sub_dir mkdir -p $new_dir done } #引數: 四個引數, 原始編碼、目標編碼、原始檔案、目標檔案 #功能: 實現檔案的編碼轉換 function iconv_file() { iconv -f $1 -t $2 $3 -o $4 1>iconvLog 2>&1 errString=`cat iconvLog|grep "illegal input sequence"` if [ -z "$errString" ] then : else echo -e "$3\n $errString" fi rm -rf iconvLog } #功能: 將源目錄中的所有檔案進行編碼轉換, 輸出到另一目錄, 源目錄檔案保持不變 function main() { create_outDirTree $IN_DIR $OUT_DIR for f in `find $IN_DIR -type f` do fname=`echo $f|awk -F "$IN_DIR" '{print $2}'` out_fname=$OUT_DIR/$fname iconv_file $FROM_ENCODING $TO_ENCODING $f $out_fname done } #主程式 main