Как мне рекурсивно перечислить все файлы в каталоге и отсортировать вывод по времени модификации?
Я обычно использую, 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-
работает, но не рекурсивно.
Ответы:
Вот метод, предложенный
stat
как @ johnshen64источник
find "$PWD" -type f -exec stat -f $'%m\t%N' '{}' \; | sort -rn | cut -f2-
будет печатать только абсолютные пути файлов в OS X.stat
вы используете? Ваш формат выше не работал для меня. Я должен был использовать следующее:find . -type f -exec stat --printf "%Y\t%y %N\n" '{}' \; | sort -rn | cut -f2-
. Это сstat (GNU coreutils) 8.23
Используйте
find
«s-printf
и сортировку по разумной формат даты:Это должно минимизировать процесс разветвления и, следовательно, быть самым быстрым.
Примеры, если вам не нравится дробная вторая часть (которая часто так или иначе не реализована в файловой системе):
РЕДАКТИРОВАТЬ: Стандарт
find
на Mac не имеет-printf
. Но установить GNU find на Mac несложно (см. Также эту ссылку, чтобы узнать больше о совместимости Mac / Linux иxargs
).источник
find .
должен иметь возможность получить все файлы. Что-то вроде этого:Вы должны настроить его для своих нужд.
источник
ls
в Linux есть--time-format
опция, которую вы можете использовать, чтобы гарантировать, что и недавние, и более старые даты файлов отображаются в одном и том же формате.Этот ответ на аналогичный вопрос на сайте Unix Stack Exchange помог мне, потому что я использовал zsh:
Как вывести список файлов, отсортированных по дате изменения рекурсивно (команда stat недоступна!)
источник