Как вывести список файлов рекурсивно и отсортировать их по времени модификации?
Как мне рекурсивно перечислить все файлы в каталоге и отсортировать вывод по времени модификации?
Я обычно пользуюсь 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