-1

Я ищу параметры для ls или что-то эквивалентное, которые делают следующее для указанного каталога:

Для каждого подкаталога:

  • Посмотрите на каждый файл и каталог, который он содержит, рекурсивно.
  • Найдите файл или каталог с самой последней датой обновления / изменения.
  • Показать эту рекурсивную обновленную дату.
  • При желании можно отсортировать по этой рекурсивной обновленной дате.

Afaik, обычная команда ls -lArt просматривает только дату обновления самой папки, а не ее содержимое.

Итак, я ищу эквивалент того, что du -hs * | sort -h делает для размера файла.


пример

Рассмотрим следующую структуру каталогов.

- dir
  - subdir1:        last udpated 2013-07-07
    - subdir1a:     last updated 2012-01-01
      * file1a1.txt last updated 2016-02-22
    * file1b.txt:   last updated 2016-01-06
    * file1c.txt:   last updated 2015-12-30

  - subdir2:        last updated 2016-03-10
    * file2a.txt:   last updated 2016-02-04

  * file3.txt:      last updated 2014-02-13

Вывод ls-special dir (отсортированный) будет выглядеть так:

file3.txt: last updated 2014-02-13
subdir1:   last updated 2016-02-22
subdir2:   last updated 2016-03-10

2 ответа2

0

Следующая команда выводит список всех файлов текущего дерева (.) С последним файлом, показанным последним:

find . -type f -printf "%T@ %p\n" | sort -n | awk '{print $2}' | xargs ls -lart
0

Тебе нужно:

find . -type d -exec sh -c 'echo -n {}; cd "{}"; ls -ltd * | grep -v ^d | head -n 1 | awk "{\$1=\$2=\$3=\$4=\$5=\$6=\$7=\$8=\"\"; print \$0}"; echo"" ' \;

Что это делает: сначала найдите все подкаталоги исходного каталога, затем выполните часть -exec :

echo -n {}; cd "{}"; ls -ltd * | grep -v ^d | head -n 1 | awk "{\$1=\$2=\$3=\$4=\$5=\$6=\$7=\$8=\"\"; print \$0}"; echo""

Это порождает новую оболочку (по одной на подкаталог), печатает имя подкаталога, перемещается в него, ранжируется по времени доступа (-t) всего (т.е. файлов и каталогов) в длинном формате (-l) без расширения содержание каталогов (-d). Длинный формат необходим для того, чтобы мы могли отсеять каталоги (grep -v ^d), беря только первую строку вывода (head -n 1), которая является последним доступным файлом, затем (awk) мы печатаем только его имя (не все остальные аргументы), учитывая, что его имя может содержать пробелы: наконец, он печатает новую строку, чтобы каталоги без содержимого не смешивались со следующим.

Имейте в виду, что нет никакого способа отличить ex aequo во времени модификации.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .