Como listar todos os arquivos em um diretório recursivamente e classificar a saída por tempo de modificação?
Eu normalmente uso, ls -lhtc
mas ele não encontra todos os arquivos recursivamente. 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
onde a parte da data não é consistente ou alinhada, uma solução deve levar isso em consideração.
Solução parcial
stat -f "%m%t%Sm %N" ./* | sort -rn | head -3 | cut -f2-
funciona, mas não recursivamente.
Respostas:
Aqui está um método usando
stat
como @ johnshen64 sugeridofonte
find "$PWD" -type f -exec stat -f $'%m\t%N' '{}' \; | sort -rn | cut -f2-
imprimiria apenas os caminhos absolutos dos arquivos no Mac OS X.stat
você está usando? seu formato acima não funcionou para mim. Eu tive que usar o seguinte:find . -type f -exec stat --printf "%Y\t%y %N\n" '{}' \; | sort -rn | cut -f2-
. Isso é comstat (GNU coreutils) 8.23
Use
find
's-printf
e classificar em um formato de data razoável:Isso deve minimizar os garfos do processo e, portanto, 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):
EDIT: O padrão
find
no Mac não possui-printf
. Mas não é difícil instalar o GNU find no Mac (veja também o link para mais advertências sobre compatibilidade com Mac / Linux exargs
).fonte
find .
deve conseguir obter todos os arquivos. Algo assim:Você precisa ajustá-lo para as suas necessidades.
fonte
ls
no Linux tem uma--time-format
opção que você pode usar para garantir que as datas dos arquivos recentes e mais antigas sejam mostradas no mesmo formato.Esta resposta a uma pergunta semelhante no site do Unix Stack Exchange me ajudou porque eu estava usando o zsh:
Como listar os arquivos classificados por data de modificação recursivamente (nenhum comando stat disponível!)
fonte