2015-01-08 4 views
0

У меня есть каталог, который содержит как кодированные файлы ISO-8859, так и UTF8. Я хочу преобразовать все ISO-файлы в кодировку UTF8 и оставить файлы UTF8 нетронутыми. До сих пор, у меня есть это:Обнаружение и преобразование кодировки для списка файлов

for isoFile in `file exports/invoice/* | grep "ISO-8859"`; do iconv -f iso-8859-1 -t utf-8 "$isoFile" -o "$isoFile"; done 

Проблема заключается в том, что file exports/invoice/* | grep "ISO-8859" возвращает список файлов в этом формате:

exports/invoice/2014.03547.html:     HTML document, ISO-8859 text, with very long lines, with CRLF, LF line terminators 

, который, конечно, не будет работать на Iconv. Мне нужно извлечь имя файла из этой строки и запустить его через значок.

ответ

1

Простой в использовании awk:

file exports/invoice/* | grep "ISO-8859" | awk -F':' '{print $1}'

+0

Спасибо за ваш ответ. Для полноты всей команды для преобразования кодировки становится: для файла в 'file export/invoice/* | grep "ISO-8859" | awk -F ':' '{print $ 1}' '; do iconv -f iso-8859-1 -t utf-8 "$ file" -o "$ {file}"; сделанный – ODaniel

0

Вы можете извлечь имя файла из этой строки с помощью следующей команды:

Таким образом, вся команда, чтобы извлечь имя файла получает этот путь:

file exports/invoice/* | grep "ISO-8859" | cut -d' ' -f1 | rev | cut -c 2- | rev 

И он вернется вы: экспорт/счет-фактура/2014.03547.html

+0

Thx, я предпочел метод awk, как было предложено выше, потому что он короче и также работает с пробелами в именах файлов. – ODaniel

+0

Да, awk лучше. –

Смежные вопросы