Массовая смена кодировки в файлах в Linux

Возникла банальная задача поменять кодировку файла с Windows CP-1251 на UTF-8 посредством консоли. Но заменить кодировку нужно было не в одном файле а сразу в огромном количестве мелких файлов. Как правило такая задача возникает при работе с двумя системами windows и linux. При разработке сайтов часто бывает что старые сайты при переносе всё ещё находятся в win кодировке 1251, а в современном мире лучше уже везде использовать более удобную UTF-8. Объяснение этому простое, windows предпочитает работать с текстовыми файлами в кодировке CP-1251, а linux в свою очередь использует кодировку UTF-8. Способов смены кодировки файла оказалось множество, опишу тот, который понравился мне. Можно конечно открыть каждый файлик текстовым редактором и сохранить в нужной кодировке, но если файлов очень много, то это займет огромное количество времени. Поэтому воспользуемся консолью.

UTF-8 смена кодировки linux

Данную процедуру можно провести прям на сервере в консоле. Существует такая утилита как enconv, она входит в состав пакета enca, который в свою очередь упрощает работу с кодировками файлов.

Если этого пакета нет, то его нужно будет установить на сервер. Команда для этой цели в Centos, будет примерно такая:

yum install enca

Итак, для начала неплохо бы узнать, в какой кодировке файл:

#
file -i file.txt

Или так

#
enca file.txt

 

Узнав исходную кодировку файла, меняем её с помощью команды:

#
iconv -f cp1251 -t utf8 исходный.txt -o конечный.txt

 

Есть способ, при котором программа сама определит кодировку файла, и преобразует её к кодировке текущей локали:

#
enconv file.txt

 

Преобразовать файл, в кодировку отличную от текущей локали, можно добавив параметр -x:

#
enconv -x CP1251 file.txt

 

Это всё хорошо, но нам же нужно заменить кодировку сразу в большом количестве файлов, поэтому сделаем примерно такой запрос в консоле:

for fname in *; do enconv "$fname"; done

Данный набор команд переберет все файлы в текущей директории и заменит им кодировку на текущую UTF-8. Можно сделать более выборочную сортировку если это требуется.

for fname in *.php; do enconv "$fname"; done

Тут мы меняем кодировку только в php файлах.

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *