Рекурсивно удалить строку из всех файлов 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'