Como posso fazer os arquivos `find` e find em ordem cronológica reversa?

17

Quero encontrar arquivos em subdiretórios classificados por carimbo de data / hora (da criação), com os mais recentes primeiro.

Eu olhei para a página de manual, mas parece apenas permitir que você filtre por carimbo de data e hora em vez de classificar por carimbo de data e hora.

Que opções posso passar findpara fazer isso? Como alternativa, como posso combiná-lo com outra ferramenta, como sortclassificar por carimbo de data / hora?

merlin2011
fonte
1
Você não pode findfazer nada em uma ordem classificada específica, além de escolher entre uma pesquisa profunda e uma primeira.
Jonathan Leffler
@ merlin2011, revise sua seleção de respostas aqui - a resposta atualmente selecionada é de buggy (gerará saídas que não são realmente classificadas corretamente) quando houver mais arquivos encontrados do findque podem ser passados ​​para uma única instância de ls.
Charles Duffy
@CharlesDuffy, obrigado pela nota! Atualizei as respostas aceitas.
Merlin2011

Respostas:

32

Embora a solução de Paul seja geralmente boa, ela envolve mais E / S do que simplesmente:

find bin/ -type f -printf '%Ts\t%p\n' | sort -nr | cut -f2
Peter Mortensen
fonte
E se findretornar milhões de arquivos? A classificação não vai classificar todos eles como uma lista muito longa? Ainda será eficiente? (Em vez de classificar cada diretório independente.)
Peter Mortensen
1
Não funciona com personagens engraçados em nomes de arquivo, como novas linhas
Boris Brodski
2
Isso merece apenas um comentário sobre a resposta do usuário7385, mas não tenho reputação de fazer isso. find bin/ -type f -printf '%Ts\t%p\0' | sort -nrz | cut -f2 -z | xargs -0 lsNovas versões cuttêm a opção -z, portanto, os nomes de arquivos com novas linhas funcionariam.
precisa saber é o seguinte
A quantidade de E / S nem sequer é o principal motivo para preferir essa resposta - a correção é uma distinção muito mais crítica. A xargs -0 ls -tabordagem não funcionará corretamente quando houver tantos arquivos que xargsprecisam iniciar lsmais de uma vez, mas essa abordagem continuará funcionando.
Charles Duffy
@PeterMortensen, "classificando todos como uma lista muito longa" é a única maneira de classificá-los que realmente retorna um resultado correto. Além disso, a outra resposta / aceita também não "classifica cada diretório independentemente" (se alguém quiser classificar apenas um único diretório sem repetir, poderá usar -maxdepth 1no find).
Charles Duffy