Выполнение действия при изменении или создании файла в Linux |
[исправить] |
Утилита inotifywait из состава пакета inotify-tools позволяет организовать выполнение
определенного действия в shell скрипте, при изменении, создании, удалении,
перемещении и выполнении
других операций с файлами.
Выполняем программу при появлении нового файла в директории
inotifywait -e create /home/ftp/incoming --format "%w%f" -q -m| while read file; do
clamscan $file
done
Для отслеживания изменений вместо create можно использовать modify, удаления -
delete, перемещения - move и т.п.
|
|
|
28.08.2009
|
Раздел: Корень / Программисту и web-разработчику / Shell / Готовые скрипты |
1.1, pavlinux (ok), 20:24, 28/08/2009 [ответить]
| +/– |
На одной консольке делаю
# inotifywait -e modify /tmp --format "%w%f" -q -m | while read file; do clamscan $file; done;
на другой
# > /tmp/test
# dd if=/dev/urandom of=/tmp/test count=1024 bs=100
clamav проверяет этот файл бесконечно.
Далее:
# dd if=/dev/urandom of=/tmp/test1 count=1024 bs=100
# dd if=/dev/urandom of=/tmp/test2 count=1024 bs=100
# dd if=/dev/urandom of=/tmp/test3 count=1024 bs=100
Ни один из выше описаных не проверится, так как безконечный цикл на самом первом.
inotifywait -e create - нормально.
| |
|
|
3.3, pavlinux (ok), 19:10, 29/08/2009 [^] [^^] [^^^] [ответить]
| +/– |
неа! :-|
Тока так
x=0; inotifywait -e modify /tmp --format "%w%f" -q -m | while read i; do if [ "$x" -eq 0 ]; then clamscan $i; ((x++)); fi; done;
Забавные результаты:
# x=0; inotifywait -e modify /tmp --format "%w%f" -q -m | while read i; do ((x++)); echo "COUNT = $x "; done;
# dd if=/dev/urandom of=/tmp/test count=1 bs=1
выдаёт
COUNT = 1
COUNT = 2
# dd if=/dev/urandom of=/tmp/test count=1 bs=100
COUNT = 1
COUNT = 2
# dd if=/dev/urandom of=/tmp/test count=100 bs=1
COUNT = 1
COUNT = 2
...
...
COUNT = 100
COUNT = 101
# dd if=/dev/urandom of=/tmp/test count=100 bs=1
COUNT = 1
COUNT = 2
...
...
COUNT = 33
COUNT = 34
Ну в общем ясно, dd использует write() count раз, а COUNT - это сколько inotifywait успеет поймать, и ждет пока тело while отработает.
Так что, лучше наверно использовать inotifywait -e close
| |
|
|
1.6, bliss (?), 23:19, 01/09/2009 [ответить]
| +/– |
Есть перловая утила -- iwatch. Мне в ней неудобен конфиг -- в xml файле. На мой взгляд, xml для такого перебор. Начал переписывать под свои нужды, для поддержки самбы.
| |
|