LinuxForum.Fans
Тема

*.php из cp1251 в utf8 рекурсивно

Автор: h0lder 8 сообщений 5337 просмотров
#222545

Пытаюсь в заданной папке и всех ее подпапках преобразовать файлы php (и PHP) из cp1251 в utf8

Пробовал такие команды:
find /папка -name "*.php" -exec enconv -x UTF8 {} \;
find /папка -iname "*\.php" -exec enconv {} \;
find /папка -name "*.php" -exec enconv {} \;
find /папка -name "*.php" |enconv
find /папка -name "*.php" |enconv -x UTF-8
не конвертирует.

а вот эта:
find /папка -type f -iname "*\.php" -exec recode -f cp1251..utf8 {} \;
портит файлы, которые уже в кодировке UTF-8

Помогите пожалуйста.

#222561
h0lder написал:
Пытаюсь в заданной папке и всех ее подпапках преобразовать файлы php (и PHP) из cp1251 в utf8

проще скрипт написать, что-то типа(не проверил!) :

text
#!/bin/sh
TMP=`mktemp`
if file "$1" | grep -q 'UTF-8'; then
  echo "$1 уже перекодирован"
else
  iconv -f cp1251 $1 >$TMP || exit
  mv --backup "$TMP" "$1" || exit
fi

и вперёд
[console]find . -name "*.php" -exec ./convert1251toutf-8.sh {} \;[/console]

#222562

h0lder, попробуйте вместо enconv использовать enca — она с кодировками, IMHO, более корректно обращается, лишний раз не перекодирует.

#222621
drBatty написал:
[quote=h0lder]Пытаюсь в заданной папке и всех ее подпапках преобразовать файлы php (и PHP) из cp1251 в utf8

проще скрипт написать, что-то типа(не проверил!) :

text
#!/bin/sh
TMP=`mktemp`
if file "$1" | grep -q 'UTF-8'; then
  echo "$1 уже перекодирован"
else
  iconv -f cp1251 $1 >$TMP || exit
  mv --backup "$TMP" "$1" || exit
fi

и вперёд
[console]find . -name "*.php" -exec ./convert1251toutf-8.sh {} \;[/console][/quote]

Создает рядом с файлом file.php новый файл file.php~
Но file.php~ по прежнему в cp1251

Файлы в UTF-8 не трогает, написав "уже перекодирован". Тут все ОК.

#222626
h0lder написал:
Создает рядом с файлом file.php новый файл file.php~
Но file.php~ по прежнему в cp1251

тот что с ~ - это не новый, а старый файл. Сохраняется в целях бекапа. Если не нравится - уберите ключ --backup, но это не надёжно...

#222631

вот это я дал...
все уже давно работает

в тестовых файлах не было русских букв, поэтому и не конвертировало в utf8

#222716

скрипт на некоторых файлах выдает:

text
iconv: illegal input sequence at position *** (iconv: недопустимая входная последовательность в позиции ***)

Как с этим справиться?

#222845

[console]doc@dt:~/cp$ iconv --help
Использование: iconv [КЛЮЧ...] [ФАЙЛ...]
Преобразует указанные файлы из одной
кодировки в другую.

Спецификация формата ввода/вывода:
-f, --from-code=ФАЙЛ кодировка оригинального
текста
-t, --to-code=ФАЙЛ кодировка для вывода

Информация:
-l, --list перечислить все известные
встроенные кодировки

Усправление выводом:
-c пропускать на выводе
недопустимые знаки
-o, --output=FILE выходной файл
-s, --silent не печатать предупреждения

--verbose печатать информацию о ходе
работы

-?, --help Выдает этот справочный
список
--usage Выдает краткую информацию
об использовании
-V, --version Печатает версию программы

Обязательные или необязательные аргументы
для длинных ключей также являются
обязательными или необязательными для
соответствующих коротких ключей.

Инструкции по сообщению об ошибках
смотрите на
<http://www.gnu.org/software/libc/bugs.html>.
[/console]

Войдите или зарегистрируйтесь, чтобы ответить.