#linux #bash #command-line
#linux #bash #командная строка
Вопрос:
У меня есть каталог, который сохраняет новый файл журнала для каждого запуска, поэтому я использую следующую команду для отслеживания последнего файла журнала:
tail -f $(ls -t | head -1)
Итак, мой вопрос заключается в том, есть ли какой-либо способ перейти от одного файла к следующему, если доступен более новый файл журнала, без необходимости останавливать последний tail -f
и перезапускать его?
Комментарии:
1. unix.stackexchange.com/questions/22698/…
2. @StephenC Спасибо за ответ, не видел этого вопроса. К сожалению, мои файлы имеют разные имена, так что это не сработает так, как кажется. Кроме того, у меня нет опции a -F, как кажется. Есть ли у вас альтернатива для этого? PS: Если это здесь не подходит, я с радостью перенесу его в SU, но я нашел похожие вопросы по SO, поэтому подумал, что это может подойти
3. Какую версию tail вы используете?
4. Как выглядят имена файлов, из которых вы должны выбирать?
5. @MauriceNino у вас есть доступ к
inotify
orinotifywait
?
Ответ №1:
Что вы могли бы попробовать, это что-то вроде этого:
# setup a link that points to the youngest file
$ for f in *; do [[ ( ! -f last ) || ( "$f" -nt last) ]] amp;amp; ln -sf "$f" last; done
# monitor that file continuously by filename
$ tail -F last
запустите следующее в другой оболочке
while :; for f in *; do [ "$f" -nt last ] amp;amp; ln -sf "$f" last; done
Вы также можете запустить это в одной команде как:
while :; do for f in *; do [[ ( ! -f last ) || ($f -nt last) ]] amp;amp; ln -sf $f last; done; done amp; tail -F last
Ответ №2:
-F
Флаг for tail
поддерживается в версии GNU. (Он находится в коллекции GNU CoreUtils.)
По-видимому, IBM предоставила загрузку для GNU Toolkit для AIX, и, по-видимому, она включает версию tail
, поддерживающую эту -F
опцию.
Вы могли бы использовать это в сочетании с другими ответами на этот вопрос. (Например, используя tail -F
символическую ссылку, которую вы регулярно обновляете.)
В качестве альтернативы, если ни одно из этих решений не работает для вас, вы можете получить исходный код GNU CoreUtils 1 и изменить исходный tail
код, чтобы делать то, что вы хотите, и создать его самостоятельно на AIX.
1 — Я не проверял, но я ожидаю, что разработчики IBM вернут любые изменения, которые они вносят в CoreUtils, чтобы заставить его работать на AIX. Если нет, они обязаны предоставить вам исходный код по запросу. В любом случае, получение исходного кода, совместимого с AIX, не должно быть проблемой.
Комментарии:
1. Инструменты GNU обычно легко компилируются в AIX из коробки; по крайней мере, они это делали, когда я пытался пару лет назад. В любом случае, страница, на которую вы ссылались, также предоставляет SRPM.