Проводя результат ls в хвост

У меня есть каталог с кучей файлов журналов. Что-то вроде этого:

data170213.log data170214.log data170215.log data170216.log 

Мне интересно посмотреть последние записи последнего файла и после него. Если я знаю, что самый последний файл – data170216.log , я могу сделать это с помощью

 tail -f data170216.log 

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

 ls -1r *.log | head -1 

Я не могу решить, как отправить результат команды ls -1r * .log | head -1 к команде tail -f [FILE]

Я пробовал следующее, безуспешно

 tail -f < ls -1r *.log | head -1 

Используйте подстановку команд :

 tail -f "$(ls -1r *.log | head -n 1)" 

Это выполняется ls -1r *.log | head -n 1 ls -1r *.log | head -n 1 в подоболочке, берет свой вывод и создает новую команду, используя это; поэтому, если труба ls выводит data170216.log , команда становится

 tail -f "data170216.log" 

это то, что вам нужно.

Запишите head -n 1 вместо head -1 ; последняя форма устарела сейчас.

Вы можете использовать xargs в таких случаях. Может быть, простой и легкий:

 $ ls -1r *.log | sed -n 1p | xargs tail -f 

Или:

 $ ls -1r *.log | head -1 | xargs tail -f 

Оба работают нормально.

См. man xargs

ПРИМЕРЫ:

 find /tmp -name core -type f -print | xargs /bin/rm -f Find files named core in or below the directory /tmp and delete them. Note that this will work incorrectly if there are any filenames containing newlines or spaces. find /tmp -name core -type f -print0 | xargs -0 /bin/rm -f Find files named core in or below the directory /tmp and delete them, processing filenames in such a way that file or directory names containing spaces or newlines are correctly han‐ dled. find /tmp -depth -name core -type f -delete Find files named core in or below the directory /tmp and delete them, but more efficiently than in the previous example (because we avoid the need to use fork(2) and exec(2) to launch rm and we don't need the extra xargs process). cut -d: -f1 < /etc/passwd | sort | xargs echo Generates a compact listing of all the users on the system. xargs sh -c 'emacs "$@" < /dev/tty' emacs Launches the minimum number of copies of Emacs needed, one after the other, to edit the files listed on xargs' standard input. This example achieves the same effect as BSD's -o op‐ tion, but in a more flexible and portable way.