Изменение файлов в цикле for

#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