Я знаю, как использовать cat
быстро открыть файл, но одну из моих программ генерирует некоторые файлы журнала с супер длинными/странными именами и ввод -ls
найти имя действительно не эффективно.
Как я могу открыть последний текстовый файл, просто созданный в папку?
Спасибо!
Простой случай. Если Вы знаете, что Ваши имена файлов нормальны (никакие пробелы, globbing символы, новые строки и т.д.), можно просто сделать:
cat $(ls -t | head -n1)
Для контакта с пробелами и globbing символами просто заключите в кавычки:
cat "$(ls -t | head -n1)"
Если Ваши имена файлов произвольны, и необходимо сделать эту работу для любого имени файла, включая тех, которые имеют новые строки на их имя, используют:
cat "$(stat --printf '%n/%Y\0' * | sort -rz -t'/' -k 2 | head -z -n 1 | cut -d'/' -z -f 1 )"
stat --printf '%n/%Y\0'
: распечатайте имя файла и его дату модификации (в секундах с эпохи), разделенный a /
и затем NUL (\0
). Я использую /
и \0
потому что они - эти только два символа, не позволенные в файле/имени каталога.sort -rz -t'/' -k 2
: вид на втором /
- разделенное поле. -z
делает sort
считайте NUL-разграниченные данные. head -z -n 1
: держите только кулак NUL-разграниченным (-z
) строка. cut -d'/' -z -f 1
: распечатайте только первое /
- разграниченное поле, имя файла. Снова, -z
делает cut
соглашение с NUL-разграниченными данными. Использовать zsh
вместо bash
как Ваша оболочка, и просто выполненный:
cat *(om[1])
Вы могли установить любой из них (предпочтительно 3, так как это является самым устойчивым) как псевдоним путем добавления этой строки к Вашему ~/.bashrc
:
alias cat_last='cat "$(stat --printf "%n/%Y\0" * | sort -rz -t"/" -k 2 | head -z -n 1 | cut -d"/" -z -f 1 )" 2>/dev/null'
Я добавил /dev/null
потому что в моей системе оболочка жалуется на байт NUL, находящийся во входе. Это не блокирует команду хотя и нет никакой причины продолжать видеть ошибку.