![]() |
Есть SSH доступ. Есть папка. В ней куча подпапок и файлов.
Задача - найти все файлы, которые называются допустим "myfile.html" (порядка 50 одинаковых файлов, с одинаковым названием), и заменить в них строчку http://site.com/dir/?page=100 на http://another.com/dir2/?page=250 Подскажите, плз, возможно ли это сделать через шелл? Как это должно выглядеть? Наверное стоит смотреть в сторону sed, вроде как: sed 's/stringa1/stringa2/g' example.txt replace "string1" with "string2" in example.txt |
может, использовать ssh-клиента в пакетном режиме (batch mode)?
|
Цитата:
sed -e "s#http://site.com/dir/?page=100#http://another.com/dir2/?page=250#g" Да и скриптик можно для это цели заюзать: Код: Код:
#!/bin/bashЗЫ. Писал из головы, но должно работать. На всякий случай сделай бекап. |
Проблемку в тот раз решал всё-таки вручную. Ибо бекап сделать нет возможности. Но задача для меня очень актуальная, и в будущем возможно всплывёт не раз.
Поэтому давайте разберёмся до конца. Собственно, главный вопрос - можно ли обойтись без баш-скриптинга? Немножко порыл маны и нашёл конструкцию вроде такой: Код: Код:
find . -name *.html -exec sed -i 's/oldtext/newtext/g' {} \;Код: Код:
find . -name myfile.html -exec sed -i 's#http://site.com/dir/?page=100#http://another.com/dir2/?page=250#g'Код: Код:
{} \; |
Цитата:
Цитата:
Код: Код:
\;Соответственно, использование этих символов в твоем случае необходимо. Код: Код:
find . -name myfile.html -exec sed -i 's#http://site.com/dir/?page=100#http://another.com/dir2/?page=250#g' {} \; |
Короткий и работающий способ, даже если имена файлов содержат пробелы:
Код: Код:
find директория с файлами -iname 'маска файлов' -print0 | xargs -0 -n 1 sed -i -e 's/исходная строка/требуемая строка/g' |
| Время: 03:14 |