Encontrando o arquivo mais novo em um diretório com um milhão de arquivos

4

Atualmente, estou usando ls -t | head -1 para obter o nome do arquivo mais recente. Mas leva muito tempo porque meu diretório tem um milhão de arquivos. Eu acho que um pedaço de tempo é perdido desnecessariamente em ls -t quando sai a lista dos milhões de arquivos, todos, exceto os primeiros, serão rejeitados de qualquer maneira.

Existe alguma maneira mais rápida? Por exemplo, alguma maneira de dizer diretamente a ls para produzir apenas a primeira linha?

    
por Mak 20.05.2014 / 13:43

1 resposta

1

Eu aposto que todo o tempo é gasto comparando as datas de criação dos arquivos: embora não seja realmente proporcional a N ^ 2 (isso realmente é como N log N para smart algoritmos de ordenação), isso ainda é bastante longo.

O seguinte comando

  find . -type f -printf '%T+ %p\n' | sort -r | head -1

localiza todos os arquivos no diretório atual, lista-os do mais recente ao mais antigo e imprime apenas o primeiro item.

Pode ser convenientemente modificado, por exemplo, da seguinte forma:

  find . -type f -mtime -1 -printf '%T+ %p\n' | sort -r | head -1

Este comando encontra somente arquivos criados no último dia (-mtime -1), e ordena apenas estes. Espero que isso seja suficiente para restringir a pesquisa a um pequeno número de itens.

se você precisa de um controle melhor, você pode usar:

  find . -type f -mmin -5 -printf '%T+ %p\n' | sort -r | head -1

que, por exemplo, seleciona apenas arquivos criados / modificados há menos de 5 minutos (-mmin -5).

Dessa forma, a ordenação é restrita a um número gerenciável de objetos. Se necessário, o comando pode ser convenientemente com alias ou script, para facilitar a digitação.

    
por 20.05.2014 / 14:37