10

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

Я обычно использую 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-

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

4 ответа4

11

Используйте 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).

2

Вот метод, использующий stat как @ johnshen64, предложенный

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

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

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

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

0

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

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

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