Как перечислить только последнюю строку каждого каталога?

Я узнал от вас, как отображать только последнюю строку списка, например

ls -ltr | sed '$!d' 

Теперь я подумал, как скомбинировать его с командой find, чтобы повторить это на каждом выходе каталога, но я получил только ложное решение:

 find / -type d | xargs ls -ltr | sed '$!d' 

Если бы я правильно прочитал, это не отобразило бы последнюю строку каждого каталога, а только последнюю строку всех списков всех каталогов.

Как это сделать правильно?

2 Solutions collect form web for “Как перечислить только последнюю строку каждого каталога?”

Я бы использовал такую ​​конструкцию как отправную точку

 find / -type d -print0 | xargs -0 -I'{}' sh -c 'ls -ltr {} | tail -1' 

Caveat: он не любит пустые каталоги (выводится total 0 ).

Вероятно, это было бы лучше: комбинация поиска и оболочки

 find / -type d -print0 | while read -r -d '' dir; do ls -ltr "$dir" | sed '$!d' done 

find выведет каждый найденный каталог, используя нулевой байт вместо новой строки для их разделения. Этот поток подается в цикл while, используя read -d '' для извлечения каждого имени каталога с нулевым разделителем. Затем для каждого каталога вся sed , кроме последней строки вывода ls удаляется sed .

Ключ состоит в том, что цикл while повторяется по каждому имени каталога, поэтому самый последний файл найден для каждого каталога.

Одна из больших проблем заключается в том, что вывод ls -l не показывает вам имя каталога, поэтому выход, вероятно, не имеет большого смысла – вы видите файлы, но не знаете, в какой каталог они появляются.

Чтобы найти самый новый файл в каждом каталоге, я бы сделал следующее:

 find . -type f -printf "%h:%T@:%p\n" | sort -t: -k1,1r -k2,2nr | awk -F: '!seen[$1]++ {print $3}' 
  • find каталог, время мода и имя пути
  • sort по группе по каталогу и сортировать по времени
  • awk чтобы напечатать путь, который является первым для каждого каталога
  • заменить столбец csv-файла на столбец из другого файла
  • Замените все цифры номера социального страхования (SSN) на X
  • Передача обычных файлов только на `sed -i`
  • Как переименовать файлы с sed и csv
  • изменить шаблон, удалив пробелы?
  • sed + найти значение перед словом в строке
  • Как я могу правильно обрезать строку с помощью sed - и не убивать строку, если шаблон не существует?
  • Объединить строки между ключевыми словами в однострочные значения, разделенные запятой
  • Делайте более длинные строки из подстрок, сохраняя новую строку между каждой строкой
  • Нужно преобразовать столбец timestamp unix epoch в каждую строку с помощью sed или awk
  • Прочитайте столбец из файла и добавьте конкретный столбец другого файла
  • Преобразование многострочных линий в одну строку с помощью SED
  • Interesting Posts

    Извлеките (не размонтируйте) USB-устройства через терминал (SSH) и повторно установите USB-устройство после извлечения

    Чтение строки переменного размера и разбиение ее содержимого на отдельные строки с текстом

    Как отправить запрос на удаленный компьютер, например, «у вас есть почта», т. Е. Не использовать стену

    Как игнорировать конфликты в Yast (Opensuse Leap 42.2)

    Как скомпилировать общую библиотеку в AIX

    Как заставить клонированного гостя подключиться к Интернету?

    Наиболее распространенная кодировка для строк в C ++ в Linux (и Unix?)

    Что такое привязка?

    Поиск команд по умолчанию для быстрого набора клавиш в Gnome 3

    Перенаправление stdout и stderr определенных строк

    Команда для отображения учетных записей пользователей PostgreSQL?

    Заставить службу запускаться до того, как network.service

    Как извлечь длинное поле для листинга?

    Переместить папку в под-том BTRFS

    Альтернатива для «найти» на debian

    Linux и Unix - лучшая ОС в мире.