Intereting Posts
Проверка отметки времени Unix с использованием BASH Тип файла и разыменование при указании каталога с помощью команды LS Получить `scp path /` вести себя как `rsync path /` Как сделать работу без пароля Рекурсивно удалять подкаталоги, не содержащие шаблона в OSX Есть ли разница между обновлением терминала и обновлением программного центра в Fedora? Как добавить LIRC в ir-keytable протоколы? Как Xserver может определить, какое устройство является мышью или клавиатурой? VPN на Fedora Linux? Как мне создать manpages, используя escape-коды для жирного шрифта и т. Д.? В SGR номер 38 и 48, откуда берутся 2 и 5 номеров? Избегайте необычных символов в именах файлов с помощью `find. -printf "% p \ n" ` Название терминала показывает sudo, но я хочу, чтобы команда sudo'ed Какой размер сектора я должен выбрать для запуска ddrescue с прямым доступом на диске расширенного формата? Остановить DHCP от сети затопления доступными IP-адресами

Команда одиночной строки для последнего файла cat в ls -lrt output?

Файлы системного журнала сериализованы, и я использую ls -lrt чтобы показать мне самый последний файл. Затем я cat этот файл. Для этого требуется набирать длинный серийный номер каждый раз.

Как я могу cat последний файл, который появляется в моем ls -lrt выходе, в одной команде?

Я использую cygwin, а вывод из ls -lrt foobar_job* выглядит так:

 -rw-r--r-- 1 zundarz Domain Users 1133 Jul 31 16:54 foobar_job4855125.log -rw-r--r-- 1 zundarz Domain Users 1256 Jul 31 17:10 foobar_job4855127.log -rw-r--r-- 1 zundarz Domain Users 1389 Aug 11 10:20 foobar_job4887829.log -rw-r--r-- 1 zundarz Domain Users 1228 Aug 11 10:39 foobar_job4887834.log 

Если вы собираетесь просто cat новый файл в одной команде, вам действительно не нужна опция -l . В Linux и Cygwin вы можете использовать -1 вариант и сделать синтаксический анализ намного проще:

 $ cat "$(ls -1rt | tail -n1)" 

-1 должен быть очень портативным, он указан в POSIX .

Также имейте в виду, что синтаксический вывод ls имеет свои недостатки .

РЕДАКТИРОВАТЬ:

Как правильно отмечено в комментарии don_crissti, вам даже не нужно -1 :

  $ cat "$(ls -rt | tail -n1)" 

Этот метод не имеет cat "$(ls -1t | head -n1)" точки зрения правильности, но должен работать в большинстве случаев: cat "$(ls -1t | head -n1)"

Пробовал это в моей системе и:

 ~$ cat "$(ls -lrt | tail -n 1 | tr -s ' ' | cut -d ' ' -f9-)" 

работал.

 ls -lrt 

Дает файлы, упорядоченные по времени их модификации ( -t ) в обратном порядке ( -r ).

 tail -n 1 

Дает вам последнюю строку вывода.

 tr -s '' 

Удаляет пробелы в строке.

 cut -d ' ' -f9- 

Вырезает строку на каждом пространстве и дает вам 9-е поле, которое является именем файла. Добавление - в -f9 также дает все следующие поля, что важно для имен файлов, содержащих пробелы.

кличка

Если вы хотите использовать команду в качестве псевдонима, вам нужно избежать " символов».

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

Также необходимо избежать знака $ . В противном случае команда внутри $(...) будет выполняться один раз при установке псевдонима и не каждый раз, когда псевдоним вызывается впоследствии.

 alias catrec="cat \"\$(ls -lrt | tail -n 1 | tr -s ' ' | cut -d ' ' -f9-)\"" 

Bash с одним слоем (при условии, что ваши имена не содержат пробелов):

 cat $(ls -lrt | tail -1 | rev | cut -d" " -f1 | rev) 

Объяснение:

 tail -1 # get last line of your ls rev # reverse characters order cut -d" " -f1 # take first field using space as a separator 

Итак, rev | cut -d" " -f1 | rev rev | cut -d" " -f1 | rev rev | cut -d" " -f1 | rev thing – это трюк, чтобы получить последнее слово, разделенное пробелом, без необходимости предоставлять зависимый от платформы номер поля смещения символов.