Aqui está um método usando stat
como @ johnshen64 sugerido
find . -type f -exec stat -f "%m%t%Sm %N" '{}' \; | sort -rn | head -20 | cut -f2-
Como faço para listar todos os arquivos em um diretório recursivamente e classificar a saída por hora de modificação?
Eu normalmente uso ls -lhtc
, mas ele não encontra todos os arquivos recursivamente. Eu estou usando Linux e Mac.
ls -l
no Mac OS X pode dar
-rw-r--r-- 1 fsr user 1928 Mar 1 2011 foo.c
-rwx------ 1 fsr user 3509 Feb 25 14:34 bar.c
em que a parte da data não é consistente ou alinhada, portanto, uma solução deve levar isso em conta.
stat -f "%m%t%Sm %N" ./* | sort -rn | head -3 | cut -f2-
funciona, mas não de forma recursiva.
Use find
do -printf
e classifique em um formato de data razoável:
find -type f -printf '%T+\t%p\n' | sort -n
Isso deve minimizar os garfos de processo e, assim, ser o mais rápido.
Exemplos se você não gostar da segunda parte fracionária (que geralmente não é implementada no sistema de arquivos):
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
EDITAR: padrão find
no Mac não tem -printf
. Mas não é difícil instalar o GNU find no Mac (veja também esse link para mais detalhes sobre compatibilidade Mac / Linux e xargs
).
find .
deve conseguir todos os arquivos. Algo parecido com isto:
find . -exec ls -dl '{}' \; | sort -k 6,7
Você precisa ajustá-lo para suas necessidades.
Esta resposta a uma pergunta semelhante no site do Unix Stack Exchange me ajudou porque eu estava usando o zsh: