#for-loop #ssh #sed
#for-цикл #ssh #sed
Вопрос:
Я загружаю на хост list.txt со списком зараженных файлов. Это выглядит так:
file1.php
file2.php
cat/file3.php
cat/subcat/file4.php
Зараженные файлы изменяются только в 1-й строке. Итак, я запускаю for
цикл. Этот цикл должен изменить всю первую строку, в которой есть вредоносный код <?php
.
for file in $(cat list.txt); do sed -i '1s/.*/<?php/' *.php; done
Проблема в том, что цикл, похоже, изменяет файлы только в первой папке (file1 и file2). Файлы во вложенных папках не изменяются. Есть идеи, что я сделал не так?
Ответ №1:
Это потому, что в команде sed вы на самом деле не используете переменную, определенную в цикле. Попробуйте
for file in $(cat list.txt); do sed -i '1s/.*/<?php/' $file; done
Комментарии:
1. Отлично работает! Спасибо gile.
2. PS Есть ли способ запустить этот цикл во всех папках, кроме одной, например. /user
3. для файла в $(для egrep -V’, то пользователь/’ list.txt); делать СЭД -я ‘1С/.*/<?php/’ $file; done