Назад | Перейти на главную страницу

рекурсивно удалить строку из всех файлов index.php в домашней папке

Нам нужен сценарий оболочки для поиска и замены фрагмента внедренного кода во всех файлах index.php в папке / home.

Вы можете сделать это с помощью sed. Вот хороший учебник об этом. Это может быть так просто, как find /home/user -iname index.php -exec sed -i s/<piece of code to find/<replace with that>/ {} \;

Я предлагаю вам сделать резервную копию, прежде чем делать это и запустить несколько тестов, чтобы убедиться, что все работает нормально. Помните, что элементы между / / являются регулярными выражениями, и в зависимости от его формата вы можете закончить сопоставление большего количества элементов, которые вам нужны. Как я уже сказал, перед запуском проверьте свои «живые» файлы.

РЕДАКТИРОВАТЬ: исправлена ​​команда find, спасибо rems

for file in $(find /home/user -iname index.php)
do
  echo "replacing in file $file ..."
  sed -i 's/<piece of code to find>/<replace with that>/g' $file
done

Если хочешь ТЕСТ сначала вы можете поместить его во временный файл, проверить, правильно ли он, а затем перезаписать исходный файл:

for file in $(find /home/user -iname index.php)
do
  echo "reading from $file, writing to $file.tmp ..."
  sed 's/<piece of code to find>/<replace with that>/g' $file > $file.tmp
done

Теперь просмотрите некоторые из ваших файлов и проверьте, правильно ли была произведена замена. ЕСЛИ все в порядке, переименуйте новые файлы index.php.tmp в index.php с помощью

for file in $(find /home/user -iname index.php.tmp)
do
  echo "moving $file.tmp to $file ..."
  mv $file.tmp $file
done

Если в коде, который вы хотите заменить, есть косая черта ("/"), вы можете использовать другой разделитель в команде sed substitute: 's # фрагмент кода для поиска # замены этим #g'