Использование tac для самого последнего файла журнала из нескольких файлов журнала в каталоге - PullRequest
0 голосов
/ 30 сентября 2018

У меня есть несколько файлов журналов в каталоге, который мы назовем path/to/directory, в следующем формате после длинного листинга в Red Hat Enterprise 6:

-rw-r——-. 1 root root 17096 Sep 30 11:00 logfile_YYYYDDMM_HHMMSS.log

Существует несколько таких файлов журналов.которые генерируются каждый день.Мне нужно автоматически tac последний измененный файл без ввода точного имени файла журнала.Например, я хотел бы сделать:

tac /path/to/directory/logile*.log | grep -m 1 keyword

и автоматически tac последний измененный файл и grep ключевое слово в обратном направлении от конца файла журнала, чтобыбежит быстрее.Возможно ли это?

Проблема, с которой я сталкиваюсь, состоит в том, что в /path/to/directory всегда есть более одного файла журнала, и я не могу заставить Linux автоматически tac последний измененный файл какпока что.Любая помощь будет принята с благодарностью.

Я пробовал:

tac /path/to/directory/logfile_$(date +%Y%m%d)*.log 

, что будет tac файлом, созданным на текущий момент, но часть, с которой у меня возникли проблемы,использование tac в самом новом файле (по ГГГГММДД и ЧЧММСС), поскольку в одну и ту же дату может быть создано несколько файлов, но только один из них может быть самым текущим, а самый последний файл журнала - единственный, который меня волнует.Я также не могу использовать символическую ссылку .. Ограничения, вздох.

1 Ответ

0 голосов
/ 30 сентября 2018

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

Если ваши имена файлов действительно имеют формат logfile_YYYYDDMM_HHMMSS.log, то они будут сортироваться лексически без необходимости врожденного понимания дат.Таким образом, если ваша оболочка - bash, вы можете:

shopt -s nullglob
for x in /path/to/logfile_*.log; do
  [[ "$x" > "$file" ]] && file="$x"
done

Опция nullglob указывает bash расширять глобус, не содержащий файлов, как ноль, а не как буквальную строку.Следуя приведенному выше коду, вы можете проверить наличие $hit, прежде чем передать его на tac.

...