Пропустить навигацию.

Как заменить подсроку во всех файлах по ssh

user warning: Got error 28 from storage engine query: SELECT t.*,v.weight AS v_weight_unused FROM term_node r INNER JOIN term_data t ON r.tid = t.tid INNER JOIN vocabulary v ON t.vid = v.vid WHERE r.vid = 32 ORDER BY v.weight, t.weight, t.name in /var/www/multi/data/multi/modules/taxonomy/taxonomy.module on line 640.

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

Для замены всех подстрок во всех файлах в текущей директории нам понадобятся find и xargs.

Для примера возьмём ситуацию, когда переносим сайт на новый сервер с другими настройками вебсервера и нужно заменить старый путь к корню сайта «/home/site/data/www/site.ru» на новый «/var/www/sites/site.ru», не забываем экранировать слэши:

find . -name "*.php" -print | xargs perl -pi -e's/\/home\/site\/data\/www\/site.ru/\/var\/www\/sites\/site.ru/ig' *.php

Чтобы вы понимали конструкцию, часть с абракадаброй можно представить схематично в виде 's/a/b/ig', где строка a заменяется на строку b.

ps. Способ решает проблему с кривонаписанными сайтами, но временно. Лучше избегать таких сайтов или переписывать нормально работу с путями.