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

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

ls -ltr | sed '$!d' 

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

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

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

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

  • Извлечь точное количество элементов из одного и того же идентификатора
  • Как я могу заменить многострочную строку с помощью sed?
  • Как найти минимальный столбец в каждом n-м интервале файла, используя sed, sort, tail?
  • Сгенерируйте порядковый номер для каждой строки в конце. Изменено. Может ли кто-нибудь помочь и предложить на этом
  • Удаление управляющих символов с помощью sed
  • Поиск и замена последовательности внутри скобки
  • Использовать sed для исправления сломанных строк новой строки
  • Измените часть строки, если ключевое слово найдено с помощью sed?
  • 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 - лучшая ОС в мире.