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

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

ls -ltr | sed '$!d' 

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

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

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

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

  • Фильтрация путей на определенную глубину
  • Как добавить некоторую строку в сочетании с шаблоном в конце строки с шаблоном
  • Сравните значения столбца со всеми значениями в другом столбце
  • Первые два поля, которые будут разделены _ и остальными полями, как они есть
  • Удалите определенные объекты из плоской базы данных файлов
  • совпадение шаблонов и захват в unix
  • grep: Как найти консоль для закрытия?
  • разбор файла из ls -laLR
  • 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 чтобы напечатать путь, который является первым для каждого каталога
    Linux и Unix - лучшая ОС в мире.