Как вывести список файлов рекурсивно и отсортировать их по времени модификации?

Как мне рекурсивно перечислить все файлы в каталоге и отсортировать вывод по времени модификации?

Я обычно пользуюсь ls -lhtc но он не находит все файлы рекурсивно. Я использую Linux и Mac.

ls -l на Mac OS X могу дать

-rw-r--r--    1 fsr  user      1928 Mar  1  2011 foo.c
-rwx------    1 fsr  user      3509 Feb 25 14:34 bar.c

где часть даты не согласована или выровнена, поэтому решение должно принимать это во внимание.

Частичное решение

stat -f "%m%t%Sm %N" ./* | sort -rn | head -3 | cut -f2-

работает, но не рекурсивно.

5 ответов

Решение

Вот метод с использованием stat как предложил @johnshen64

find . -type f -exec stat -f "%m%t%Sm %N" '{}' \; | sort -rn | head -20 | cut -f2-

Использование find"s -printf и отсортировать по разумному формату даты:

find -type f -printf '%T+\t%p\n' | sort -n

Это должно минимизировать процесс разветвления и таким образом быть самым быстрым

Примеры, если вам не нравится дробная вторая часть (которая часто так или иначе не реализована в файловой системе):

find -type f -printf '%T+\t%p\n' | sed 's/\.[[:digit:]]\{10\}//' | sort -n
find -type f -printf '%T+\t%p\n' | cut --complement -c 20-30 | sort -n

РЕДАКТИРОВАТЬ: Стандарт find на Mac нету -printf, Но установить GNU find на Mac несложно (см. Также эту ссылку, чтобы узнать больше о совместимости Mac/Linux и xargs).

find . должен иметь возможность получить все файлы. Что-то вроде этого:

find . -exec ls -dl '{}' \; | sort -k 6,7

Вы должны настроить его для своих нужд.

Этот ответ на аналогичный вопрос на сайте Unix Stack Exchange помог мне, потому что я использовал zsh:

Как вывести список файлов, отсортированных по дате изменения рекурсивно (команда stat недоступна!)

В моем Linux потребовалась небольшая настройка из-заcoreutils:

      find . -type f -exec stat -c "%y %N" "{}" \;

Чтобы найти самые последние 20 файлов, отсортируйте их в обратном порядке по времени изменения:

      find . -type f -exec stat -c "%y %N" "{}" \; | sort -rn | head -20 | cut -f2-

Отstat(руководство ) документы:

      %y - Time of last modification
%Y - Time of last modification as seconds since Epoch
%n - File name
%N - Quoted file name with dereference if symbolic link
Другие вопросы по тегам