Como listar arquivos recursivamente e classificá-los por hora de modificação?

10

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.

Solução parcial

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

funciona, mas não de forma recursiva.

    
por qazwsx 24.04.2012 / 20:37

4 respostas

2

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-
    
por 25.04.2012 / 00:02
11

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 ).

    
por 25.04.2012 / 09:07
0

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.

    
por 24.04.2012 / 20:52
0

Esta resposta a uma pergunta semelhante no site do Unix Stack Exchange me ajudou porque eu estava usando o zsh:

Como listar arquivos ordenados por data de modificação recursivamente (nenhum comando stat disponível!)

    
por 12.06.2014 / 17:15

Tags