前言
最近一直在寫php和c代碼,好久沒動bash腳本,一些命令有些生疏了,今天有個需求要對指定目錄下的文件進行字符編碼轉換,寫了個腳本實現了一下
目錄結構
/home/wzy/Downloads/execl/
|__科學/{1.csv,2.csv,3.csv,4.csv}
|__教育/{1.csv,2.csv,3.csv,4.csv}
|__生活/{1.csv,2.csv,3.csv,4.csv}
|__體育/{1.csv,2.csv,3.csv,4.csv}
需求
遍歷指定根目錄下的所有文件,進行文件編碼的轉換
技巧
1.bash shell中for循環的使用
2.iconv字符編碼轉換工具的使用
腳本代碼
#!/bin/bash
#1.變量定義
directory="/home/wzy/Downloads/execl"
f_encoding="utf-8"
t_encoding="gbk"
#2.遍歷子目錄
for dir in `ls $directory`
do
if [ -d $directory/$dir ]
then
#3.遍歷子目錄的文件
for file in `ls $directory/$dir`
do
if [ -e $directory/$dir/$file ]
then
#4.文件類型轉換
iconv -f $f_encoding -t $t_encoding $directory/$dir/$file -o $directory/$dir/iconv.$file
#5.刪除原始文件
if [ $? -eq 0 ]
then
rm $directory/$dir/$file
fi
fi
done
fi
done
iconv命令
語法
iconv -f [encoding] -t [encoding] [inputfile] -o [outputfile]
選項
-f : 原文件編碼
-t : 需要轉換的編碼
-o : 指定輸出文件
後記
記錄這個腳本主要是吃飯前對腳本中絕對路徑的使用錯誤一直沒有發現,團隊喝酒歸來後反而頭腦清醒,搞定了,希望對各位看我博客的同學也有所幫助,歡迎交流,一般有留言我都會回復的,共同學習,共同進步!