Добавить конвертацию в баш

Doctor_Chaos

Проктолог-гинеколог
Регистрация
7 Сен 2013
Сообщения
949
Реакции
723
Ищу файлы в UTF-8 следующим скриптом:
#!/bin/bash
find . -name "*.js" -print0 | while read -d $'\0' -r path; do test "$(echo "$path" | enca -L russian -i)" = "UTF-8" || echo "$path" >> 1.txt; done
В итоге идет вывод всех файлов в утф в файл 1.txt
Как допилить скрипт, чтобы вместо записи в файл автоматом перекодировало в 1251?
То есть нужно добавить в обработчик
iconv -f UTF-8 -t WINDOWS-1251 "$i" > tmp.file; mv tmp.file "$i";
Как это сделать правильно?
 
Все, решил сам вопрос:
Скрипт для поиска и перекодирования файлов из одной кодировки в другую только файлов исходной кодировки:
#!/bin/bash
find -name "*.js" -type f -print0 | while read -d $'\0' -r path; do test "$(echo "$path" | enca -L russian -i)" = "UTF-8" || iconv -f UTF-8 -t WINDOWS-1251 "$path" > tmp.file; mv tmp.file "$path"; done
Может пригодится кому
 
А вот пример в одну строку, как можно перекодировать в UTF-8. Расширение искомых файлов можно добавлять.
Для конвертации используется утилита enconv из пакета enca, приимущество перед iconv в том, что не нужно создавать временные файлы, конвертирует сразу в нужную кодировку. man enconv
Код:
find . -type f \( -name "*.php" -o -name "*.snp" -o -name "*.js" -o -name "*.css" -o -name "*.less" -o -name "*.xml" -o -name "*.config" -o -name "*.csv" \) -exec enconv -L ru -x UTF-8 '{}' ';'
и наоборот, в 1251
Код:
find . -type f -name '*.php' -exec enconv -V --convert-to=CP1251 '{}' ';'
Расширить поиск по файлам, можно из предыдущего примера.
 
Последнее редактирование:
Дело в том, что в этом варианте будет энкодить все подряд, а у меня ситуация дурацкая - среди тонны файлов в 1251 есть некоторое количество в UTF. Нужно перекодировать только их.
 
В моем примере, помоему (если не отшибает мозги), если оно уже в нужной кодировке, должно пропустить конвертацию. enca шибко умная
 
Точно, так и есть - перекодировало как надо, спасибо!
Единственное - требует обязательно наличие ключа -L ru
 
Последнее редактирование:
Оказывается не каждый провайдер устанавливает на хостинг пакет "enca" и смена кодировки "enconv" не работает.
Пришлось тащить все файлы к себе и конвертировать на месте из под Windows.
 
1. Все же это тема конвертации в баш.
2. По опыту — в любом провайдере, с адекватной ТП, можно попросить установить на VPS пакет enca, главное объяснить, что вам понадобится пакетная конвертация, в этом пакете нет ничего крамольного, ресурсы не жрет, т.к. это не "болтающийся" резидент. Главное пошевелить поддержку. Впрочем, в наше время можно и не за дорого VDS купить. Не таскать же туда-сюда файлы ради конвертации!
 
Назад
Сверху