Задать вопрос
@Netscout

Как запустить iconv для перекодировки всех файлов в каталоге?

Здравствуйте !

Столкнулся с ситуацией - нужно перекодировать несколько десятков тысяч текстовых файлов из кодировки cp1251 в utf8.

Для этого отлично подходит команда: iconv -f cp1251 -t utf8 * -o *
(единичный запуск такой: iconv -f cp1251 -t utf8 исходный.txt -o конечный.txt)

Но выдаёт ошибку: "Слишком длинный список аргументов"

Как мне её заставить работать с таким списком аргументов ?
В каталоге с пару сотнями файлов отрабатывает на ура, но когда их дохренища - не хочет.

Благодарю за подсказки !
  • Вопрос задан
  • 1523 просмотра
Подписаться 2 Оценить Комментировать
Решения вопроса 2
romy4
@romy4
Exception handler
find -name "mask" -exec iconv -f cp1251 -t utf8 {} -o конечный{} \;
Ответ написан
@Eddy_Em
find . -name "шаблон" -exec enconv {} \;
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@RorreLataf
Можно использовать вот такой скрипт:
#!/bin/bash

for file in $(find . -type f)
do
  name_out=$file
  name_out+="_utf8"
  
  iconv -f cp1251 -t utf8 $file -o $name_out
  
  rm $file
  mv $name_out $file
done


Текст скрипта надо сохранить в файл, дать файлу разрешение на выполнение, положить его в тот каталог в котором надо конвертировать файлы и запустить скрипт.

Внимание!
Решение
find -name "mask" -exec iconv -f cp1251 -t utf8 {} -o {} \;

является неверным, лично убедился!
Таким образом файлы будут портиться!!!
Так происходит потому что и входной и выходной файл будут одним файлом, в итоге iconv будет неправильно работать!
У одних пользователей, такая команда вообще обнуляет файлы, у меня такая команда файлы больше 20 Кб обрезала, но файлы маленькие обрабатывала.
В общем, для iconv входной и выходной файлы должны быть строго разными!
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы