У меня есть куча файлов журналов в папке. Когда я вхожу в папку и смотрю на файлы, она выглядит примерно так.bash tail самый новый файл в папке без переменной
$ ls -lhat
-rw-r--r-- 1 root root 5.3K Sep 10 12:22 some_log_c48b72e8.log
-rw-r--r-- 1 root root 5.1M Sep 10 02:51 some_log_cebb6a28.log
-rw-r--r-- 1 root root 1.1K Aug 25 14:21 some_log_edc96130.log
-rw-r--r-- 1 root root 406K Aug 25 14:18 some_log_595c9c50.log
-rw-r--r-- 1 root root 65K Aug 24 16:00 some_log_36d179b3.log
-rw-r--r-- 1 root root 87K Aug 24 13:48 some_log_b29eb255.log
-rw-r--r-- 1 root root 13M Aug 22 11:55 some_log_eae54d84.log
-rw-r--r-- 1 root root 1.8M Aug 12 12:21 some_log_1aef4137.log
Я хочу просмотреть самые последние сообщения в последнем файле журнала. Теперь я могу вручную скопировать имя самого последнего журнала, а затем выполнить хвост на нем, и это сработает.
$ tail -n 100 some_log_c48b72e8.log
Это связано с ручным трудом, поэтому вместо этого я хотел бы использовать bash-fu для этого.
В настоящее время я нашел этот способ сделать это;
filename="$(ls -lat | sed -n 2p | tail -c 30)"; tail -n 100 $filename
Это работает, но я испугался, что мне нужно сохранить данные в переменную, чтобы сделать это. Можно ли сделать это в bash без сохранения промежуточных результатов в переменную?
Лучшее решение заключается в том, чтобы ваш логгер использовал имена на основе временных меток для файлов журнала и использовал фиксированное имя типа 'current' для самого последнего файла. (Или символическая ссылка с фиксированным именем на самое последнее.) – chepner