вывод tailf в качестве параметра сценария

Для поиска существующих файлов, find, вероятно, наиболее полезен.

Если вы знаете, что файлы новые, достаточно посмотреть на ctime. Это позволит найти файлы с ctime менее 60 минут назад.

find . -cmin -60

Если вы хотите включить старые файлы, которые были изменены, используйте find . -mmin -60 -o -cmin -60, чтобы также проверить временную метку модификации.

Если вместо этого вы хотите видеть файлы по мере их создания (или изменения, или удаления), вам поможет inotifywait. Это позволит выводить строку для каждого созданного или удаленного файла до тех пор, пока работает программа. timeout из GNU coreutils может быть использован для ограничения времени выполнения.

inotifywait -q -m -e create,delete  .
2
23.11.2016, 07:31
2 ответа

Проблема в том, что ваша команда message.sh никогда не запускается. Оболочка сначала должна оценить команду $ (...) , чтобы передать результат в качестве аргументов, но вы используете tailf , который никогда не заканчивается. Сравните с этим:

ls $(echo hello;sleep 10) & sleep 1; ps

ps покажет вам, что ls не был запущен, и получит только аргумент hello , когда спит 10 завершено, и часть $ () завершена.

1
27.01.2020, 22:19

попробуйте передать в двойных кавычках. и если ваша ОС поддерживает команду тайм-аута, попробуйте использовать тайм-аут (см. сообщение ниже)

shell

, если вам не нужен тайм-аут, попробуйте следующее:

#!/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
0
27.01.2020, 22:19

Теги

Похожие вопросы