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

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

2 ответа

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

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

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

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: '# фрагмент кода, чтобы найти # replace с этим #g'

Другие вопросы по тегам