PDA

Показать полную графическую версию : [решено] find -newer


Endy1
11-01-2010, 18:16
Это наверное простой вопрос для большинства. Но я только начинаю заниматься bash-скриптингом, поэтому никак не найти правильный вариант.

Скрипт обходит все файлы в каталоге и ищет файлы содержащие определённые символы (R5hb66d6f7idj). Причём искать он должен только в файлах новее контрольного kontrol_date. В контрольном файле просто дата последнего запуска этого скрипта.

failid=`find /srv/virtual_2/ -newer "cat kontrol_date" -exec grep -q "R5hb66d6f7idj" '{}' \; -print`

Всё вроде в порядке, кроме параметра -newer "cat kontrol_date"
Похоже я его неправильно задаю. Что-то с синтаксисом не то?

На всякий случай весь скрипт:

LOG="/root/infected-website-check/logifailike"
cat=/bin/cat
echo `/bin/date` | cat > kontrol_date
failid=`find /srv/virtual_2/ -newer $cat kontrol_date -exec grep -q "R5hb66d6f7idj" '{}' \; -print`

for fail in $failid; do
echo -n $fail " : " >> $LOG
cat "$fail" | grep "R5hb66d6f7idj" >> $LOG
echo "" >> $LOG
done
cat $LOG | grep "R5hb66d6f7idj"

if [ -s $LOG ]
then
/usr/bin/mail -s "Обнаружен вредоносный код" name@domen.ru < $LOG
fi

rm $LOG


Подскажите пожалуйста где я делаю неправильно? Или как иначе указать, чтобы он искал только в новейших файлах?

ruslandh
12-01-2010, 02:47
1. Наверное всё-же
-newer kontrol_date


-newer file
File was modified more recently than file. If file is a sym‐
bolic link and the -H option or the -L option is in effect, the
modification time of the file it points to is always used.

Endy1
01-02-2010, 16:42
Вот что в итоге у меня получилось:

find /srv/virtual_2/ \( -newer $kontrol \) -not -iname "*_log" -not -iname "*sess*" \( ! -path "*/usage/*" \) -iname "*" -exec grep -q "R5hb66d6f7idj" '{}' \; -print




© OSzone.net 2001-2012