Você diz que " ls canalizada para a cabeça leva um tempo muito longo para completo".
A causa disso não é ls
, mas o número de arquivos no seu diretório. Se você tiver 100.000 arquivos em um único diretório, qualquer maneira de resolver esse problema teria que obter informações sobre todos os 100.000 arquivos antes que pudesse pensar em classificá-los ou imprimir qualquer saída.
Se estiver demorando muito, a solução real é dividir os arquivos em vários diretórios.
Se você não pode distribuir os arquivos por vários diretórios, existe alguma maneira de diminuir o número de arquivos a serem considerados ? por exemplo, se os nomes dos arquivos incluírem uma data, talvez você possa incluir um curinga para que o sistema não precise classificar 100.000 arquivos. Ou talvez estejam numerados sequencialmente? (Isso pode ou não ajudar, mas vale a pena tentar.)
Quantas vezes você está tentando fazer isso? Talvez valha a pena salvar / armazenar em cache a saída para reutilização .
Agora, uma pergunta.
Tem certeza de que quer dizer "hora da criação" e não "hora da alteração" ? A maioria das ferramentas pode exibir apenas "hora de alteração", não "hora de criação".
Obter "tempo de criação" é algo muito novo, que requer um sistema de arquivos ext4 e algumas ferramentas que não são fáceis de instalar.
Se você quiser mudar o horário
Tempo de alteração (ctime para abreviar) significa o horário em que os atributos do arquivo foram alterados pela última vez.
ls -c
classifica por ctime.
Você deseja a saída em ordem crescente, e não decrescente, portanto, você também deve inverter a saída com a -r
opção
Então você poderia fazer assim:
ls -cr | head -n 100
Uma solução mais longa para o mesmo problema usando stat
:
find . -mindepth 1 -maxdepth 1 -exec stat -c $'%Z\t%n' '{}' \; |
sort -k 1n |
cut -f 2 -d $'\t' |
head -n 10 |
sed -e 's/^\.\///'
mas isso corre mais devagar do que ls -cr
no meu sistema.
Se você deseja tempo de modificação
Hora da modificação (mtime para abreviar) significa a hora em que o conteúdo do arquivo foi alterado pela última vez.
ls -t
classifica por mtime.
Mude ls -cr
para ls -tr
(melhor opção) ou mude stat -c $'%Z\t%n'
para stat -c $'%Y\t%n'
.
Se você precisar de tempo de criação
(tempo curto)
Isso é mais difícil.
Primeiro, verifique se o diretório está em um sistema de arquivos formatado usando ext4
. Você pode usar tune2fs -l <device name>
para verificar isso.
Depois, há um novo stat
formato chamado %W
, que pode ajudá-lo aqui. Para obtê-lo, você precisará baixar uma versão do GNU Coreutils lançada em outubro de 2010 ou depois, extraí-la, compilá-la e instalá-la.
Então, dependendo do seu kernel, isso pode funcionar (ainda não tentei).
find . -mindepth 1 -maxdepth 1 -exec stat -c $'%W\t%n' '{}' \; |
sort -k 1n |
cut -f 2 -d $'\t' |
head -n 10 |
sed -e 's/^\.\///'
Veja também:
Se você receber erros sobre "'$\t'
A '$\t'
notação requer bash
ou zsh
: não funcionará no dash
ou sh
no Ubuntu. Se você realmente precisa usar essas conchas, você vai precisar alterar qualquer \t
de Ctrl+ V, Tabe remova o líder $
de um pouco antes da citação de abertura.
find -mtime +<number of days> -delete
limpar todos os arquivos com mais de uma certa idade. Isso significa que nenhum tipo é necessário.