Нужно добиться вывода списка $i, содержащих данное $text.
#!/bin/shdate >> spam-htaccess.log
text="abrakadabra"for i in `ls /var/www/vhosts`; do
file=/var/www/vhosts/$i/httpdocs/.htaccess
if test -s $file
then cat $file | grep $text | grep -v ^# | awk '{ print ($text, $0) ;}'>> spam-htaccess.log
fi
doneПробовал, через, awk - не получается...
>[оверквотинг удален]
>
>for i in `ls /var/www/vhosts`; do
> file=/var/www/vhosts/$i/httpdocs/.htaccess
> if test -s $file
> then cat $file | grep $text | grep -v ^# | awk '{ print ($text, $0) ;}'>> spam-htaccess.log
> fi
>done
>
find /var/www/vhosts -name ".htaccess" -exec grep -l "abrakadabra" {} \;
Очень надеюсь, что вы не студент-раздолбай. :-)
>find /var/www/vhosts -name ".htaccess" -exec grep -l "abrakadabra" {} \;Я бы ещё -type f добавил
>Я бы ещё -type f добавилНу да, не помешает. Как говорится, "во избежание". Но этим пусть уже автор темы занимается. :-)
>>Я бы ещё -type f добавил
>
>Ну да, не помешает. Как говорится, "во избежание". Но этим пусть уже
>автор темы занимается. :-)Нафиг мне использовать find?
>>>Я бы ещё -type f добавил
>>
>>Ну да, не помешает. Как говорится, "во избежание". Но этим пусть уже
>>автор темы занимается. :-)
>
>Нафиг мне использовать find?а) с целью обойти все подкаталоги, а не только с глубиной 1.
б) идиоматичена если хочется только с глубиной 1, то:
#!/bin/sh
date >>spam-htaccess.log
grep -l abrakadabra /var/www/vhosts/*/httpdocs/.htaccess 2>/dev/null >> spam-htaccess.logНафиг тебе использовать for+cat+awk++++ =) ?
>а если хочется только с глубиной 1, то:...всё равно find, только уже с ключиком -maxdepth 1 =))
>>а если хочется только с глубиной 1, то:
>
>...всё равно find, только уже с ключиком -maxdepth 1 =))аха, я помню :))
но вдруг find религией не позволен :)PS grep -r ;)
>>>а если хочется только с глубиной 1, то:
>>
>>...всё равно find, только уже с ключиком -maxdepth 1 =))
>
>аха, я помню :))
>но вдруг find религией не позволен :)
>
>PS grep -r ;)find слишком долго работает, да еще в тех директориях, где не надо искать.
Я уже и так сузил зону поиска.
>find слишком долго работает, да еще в тех директориях, где не надо
>искать.
>Я уже и так сузил зону поиска.для этого и есть ключ maxdepth у find чтобы не обходить все дерево ниже начальной точки.
ну вот так еще можно:
#!/bin/shdate >> spam-htaccess.log
text="abrakadabra"for i in /var/www/vhosts/*/httpdocs/.htaccess ; do
grep $text $i 2>/dev/null | egrep -qv '^#' && echo $i >> spam-htaccess.log
done
>find слишком долго работает, да еще в тех директориях, где не надо
>искать.
>Я уже и так сузил зону поиска.М-да, как все запущено...
date >> spam-htaccess.log
text="abrakadabra"
find /var/www/vhosts/*/httpdocs -type f -name ".htaccess" -exec grep -l "$text" {} \; >> spam-htaccess.log
>[оверквотинг удален]
>> if test -s $file
>> then cat $file | grep $text | grep -v ^# | awk '{ print ($text, $0) ;}'>> spam-htaccess.log
>> fi
>>done
>>
>>
>>Пробовал, через, awk - не получается...
>
>find /var/www/vhosts -name ".htaccess" -exec grep -l "abrakadabra" {} \;
>Очень надеюсь, что вы не студент-раздолбай. :-)Совершенно не то.
>Совершенно не то.Значит вы плохо сформулировали задачу. Если бы вы привели к куску вашего неработающего кода пример, то это было бы эффективнее. А так мы попытались сделать ваш неправильный код рабочим :)
Что вам надо-то? Какие файлы? Что в них? В какой форме вывести?
>>Совершенно не то.
>
>Значит вы плохо сформулировали задачу. Если бы вы привели к куску вашего
>неработающего кода пример, то это было бы эффективнее. А так мы
>попытались сделать ваш неправильный код рабочим :)
>
>Что вам надо-то? Какие файлы? Что в них? В какой форме вывести?
>Нужно добиться вывода списка $i, содержащих данное $text.
Чё непонятного?
ну, нахожу я файл, который содержит исходное слово, как его расположение передать в логи?Вот, например, почему в awk нельзя передать внешнюю переменную?
awk '{ print ($text, $0) ;}'
где, $text определяется в начале цикла.
>Вот, например, почему в awk нельзя передать внешнюю переменную?Можно! man awk на тему ключа -v
>Нужно добиться вывода списка $i, содержащих данное $text.
>
>Чё непонятного?Всё непонятно..
>ну, нахожу я файл, который содержит исходное слово, как его расположение передать
>в логи?В какие логи? В системные? man logger
Или просто записать в файл?
Вы уточняйте, это в ваших же интересах.
>ну, нахожу я файл, который содержит исходное слово, как его расположение передать
>в логи?на вкус grep -l или if с проверкой кода возврата
>Вот, например, почему в awk нельзя передать внешнюю переменную?
>awk '{ print ($text, $0) ;}'Ну потому что вы сами это отключили одинарными кавычками, awk тут не причем. Кстати зачем он вообще вам понадобился?
Всем спасибо за помощь.
Вариант с find:
#!/bin/shdate >> spam-htaccess.log
url="http://leshik.info/"for i in `ls /var/www/vhosts`; do
if test -s $file
then find /var/www/vhosts/$i/httpdocs -name ".htaccess" -exec grep -l "$url" {} \; >> spam-htaccess.log
fi
doneВариант с awk:
#!/bin/shdate >> spam-htaccess.log
url="http://leshik.info/"for i in `ls /var/www/vhosts`; do
file=/var/www/vhosts/$i/httpdocs/.htaccess
if test -s $file
then cat $file | grep $url | grep -v ^# | awk -v domain="$i" '{ print domain ;}'>> spam-htaccess.log
fi
doneВ варианте с find показываются закомментированные строки...
>В варианте с find показываются закомментированные строки...Это решается соответствующей модификацией поискового регулярного выражения.
find /var/www/vhosts/*/httpdocs -type f -name ".htaccess" -exec grep -l "^[^#].*$text" {} \; >> spam-htaccess.log
Выражение "^[^#].*$text" означает, что нужно искать строки, не начинающиеся с символа "#" и
включающие в себя текст, содержащийся в переменной $text.