Для поиска существующих файлов, find
, вероятно, наиболее полезен.
Если вы знаете, что файлы новые, достаточно посмотреть на ctime. Это позволит найти файлы с ctime менее 60 минут назад.
find . -cmin -60
Если вы хотите включить старые файлы, которые были изменены, используйте find . -mmin -60 -o -cmin -60
, чтобы также проверить временную метку модификации.
Если вместо этого вы хотите видеть файлы по мере их создания (или изменения, или удаления), вам поможет inotifywait
. Это позволит выводить строку для каждого созданного или удаленного файла до тех пор, пока работает программа. timeout
из GNU coreutils может быть использован для ограничения времени выполнения.
inotifywait -q -m -e create,delete .
Проблема в том, что ваша команда message.sh
никогда не запускается. Оболочка сначала должна оценить команду $ (...)
, чтобы передать результат в качестве аргументов, но вы используете tailf
, который никогда не заканчивается. Сравните с этим:
ls $(echo hello;sleep 10) & sleep 1; ps
ps
покажет вам, что ls
не был запущен, и получит только аргумент hello
, когда спит 10
завершено, и часть $ ()
завершена.
попробуйте передать в двойных кавычках. и если ваша ОС поддерживает команду тайм-аута, попробуйте использовать тайм-аут (см. сообщение ниже)
, если вам не нужен тайм-аут, попробуйте следующее:
#!/bin/bash
tailf /var/log/z-way-server.log | grep --line-buffered device-info | gawk 'BEGIN { FS = "\"" } ; {print $4,"is",$8}' | while read line
do
/absolute/path/of/message.sh "${line}"
done