2013-06-24 2 views
1

У меня есть куча файлов кодируются с GB2312, теперь я хочу, чтобы преобразовать их в UTF-8, поэтому я применяю код ниже:Пакетное кодирование преобразования файлов

find . | xargs iconv -f GB2312 -t UTF-8 

Он успешно преобразовать их, но выход напечатан в консоли.

Здесь я хочу, чтобы они были сохранены в их исходных файлах, как мне это сделать?

ответ

0

Вы всегда можете использовать цикл вместо xargs. Я бы не рекомендовал перезаписывать файлы в однократном вызове командной строки. Как насчет их переноса в первую очередь:

for file in `find .`; do 
    mv "$file" "file.old" && iconv -f GB2312 -t UTF-8 < "$file.old" > "$file" 
done 

Просто позаботьтесь об этом. Если ваши имена файлов содержат пробелы, этот цикл может работать неправильно.

+0

Вы код работает как шарм, спасибо! Просто любопытно, есть ли какая-нибудь одна команда, чтобы сделать это? – MrROY

+0

Вы можете поместить все это на одну строку, если вы поместите точку с запятой после тела цикла * ie * 'for ...; do mv ....> "$ file"; done' – paddy

+0

Кстати, если у вас есть пробелы в ваших именах файлов, прочитайте это: http://stackoverflow.com/questions/7039130/bash-iterate-over-list-of-files-with-spaces – paddy