На днях перенёс некоторые сайты на другие сервера. При том, неликвид переместился на сервер под управлением веб-панели Ajenti V. Там, нет apache, а потому файлы .htaccess не работают.
В результате, на одном из статичных многостраничников убилась кодировка и инклюды. Дело в том, что в .htaccess была задана принудительная перекодировка в windows-1251 и все файлы с расширением .html интерпертировались как .php
Давно собирался привести всё это хозяйство в нормальный формат, но всё руки не доходили. Сегодня дошли! Следите за руками.
Вся операция над 15000 файлов делается всего несколькими командами . Вот они. Захожу в консоль по SSH, захожу в нужную папку и выполняю.
//Меняю метатэг с кодировкой в head'е страницы find -type f -name \*.html -exec sed -i -r 's/charset=windows-1251/charset=utf-8/g' {} \; //Меняю текст во всех ссылках с .html на .php find -type f -name \*.html -exec sed -i -r 's/\.html/.php/g' {} \; //Меняю расширения файлов с .html на .php find -type f -name "*.html" | rename "s/\.html$/.php/" //Конвертирую все .php файлы из кодировки cp1251 в utf-8 и сохраняю с расширением .php.net (чтобы сначала проверить всё ли там хорошо) find -type f -name \*.php -exec iconv -f cp1251 -t utf-8 -o {}.net {} \; //Переименовываю старые .php файлы в .phpold find -type f -name "*.php" | rename "s/\.php$/.phpold/" //Убираю хвост-расширение .net, чтобы осталось .php и провераю всё ли хорошо find -type f -name "*.net" | rename "s/\.net$//" //Удаляю старые файлф (.phpold) find -type f -name "*.phpold" -delete
Комментарии (//) привожу для понятности. Пихать их в консоль не стоит.
Команды выполняются рекурсивно. Т.е. не только в той папке, в которую я зашёл, но и в её подпапках. Будьте внимательны!
Порядок команд (если по уму) следовало бы поменять. Как минимум сначала переконвертировать файлы в кодировку utf-8, потом делать в них замену текста. Так, если что-то пойдёт не так, у вас останутся старые файлы и можно будет всё отыграть обратно.
Да и менять расширения из .html в .php тоже лишнее действие. Можно было бы сделать немного иначе и превратить их в .html.net, а дальше работать в этом ключе.
Это детали. Как сделал, так сделал. Главное, что я пытаюсь донести: не надо бездумно копировать команды. Попытайтесь разобраться в том что делаете. Ну или запаситесь резервной копией на случай локального армагедона.
А с вами был Доктор Лексиум.
Всё, я побежал пить чай.
Подписывайтесь на RSS и вместо лайков делитесь ссылками на этот пост.
Напишите комментарий