2012-01-24 2 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). Кроме того, опция -type f в команде find пропустит для вас нефайловые объекты, поэтому 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 не работает, как вы ожидали, ВИМ может также сделать работа:

for f in *.*; do vim -c "set fileencoding=utf8|wq" $f; done 
Смежные вопросы