2012-01-24 52 views
0

我有這個腳本,與iconv一起工作,自動將目錄中的一組文件的編碼轉換爲UTF-8,並將原始文件擴展爲.old,但我想知道如何修改腳本以使其查看並轉換目錄中的所有文件以及所有子目錄中的所有文件。Ubuntu的UTF-8轉換器腳本

終端代碼:

sudo convert/dir_iconv.sh convert/books cp1251 utf8 

dir_iconv.sh腳本

#!/bin/bash 

ICONVBIN='/usr/bin/iconv' # path to iconv binary 

if [ $# -lt 3 ] 
then 
echo "$0 dir from_charset to_charset" 
exit 
fi 

for f in $1/* 
do 
if test -f $f 
then 
echo -e "\nConverting $f" 
/bin/mv $f $f.old 
$ICONVBIN -f $2 -t $3 $f.old > $f 
else 
echo -e "\nSkipping $f - not a regular file"; 
fi 
done 
+0

你應該從正確引用「$ f」「$ 2」等開始,否則就會使用空格將文件名擰緊。 –

+0

我從來沒有使用Linux,所以你可以做到這一點,並轉發? – Blainer

回答

0

而不是for f in $1/*嘗試使用類似for f in $(find $1 -type f)。此外,find命令中的-type f選項將爲您跳過非文件對象,因此test和條件邏輯不是必需的。

[編輯]

例如,這可能工作,沒有經過測試(清理格式化有點太):

#!/bin/bash 

ICONVBIN='/usr/bin/iconv' # path to iconv binary 

if [[ $# -lt 3 ]]; then 
    echo "$0 dir from_charset to_charset" 
    exit 
fi 

for f in $(find $1 -type f); do 
    echo "Converting $f" 
    /bin/mv $f $f.old 
    $ICONVBIN -f $2 -t $3 $f.old > $f 
done 
+0

你可以重寫併發布它嗎? – Blainer

+0

該腳本無效。 – Blainer

+0

它怎麼樣都行不通?你的回答不清楚。 –

0

如果的iconv並不如你預期的工作,Vim也可以做作業:

for f in *.*; do vim -c "set fileencoding=utf8|wq" $f; done