Localizar com eficiência o primeiro arquivo (no sentido lexicográfico) entre vários diretórios

1

Eu tenho centenas de pastas e cada pasta contém milhares de arquivos. Eu quero identificar o "primeiro" arquivo entre todos os arquivos de todas as pastas, "primeiro" sendo definido pela ordem lexicográfica dos nomes de arquivos (excluindo caminhos). Por exemplo:

/a/abc.txt
/b/aac.txt
/b/bxz.txt

Em seguida, o resultado deve ser aac.txt .

Atualmente estou usando isso:

find . -iname "*" -printf "%f\n" | sort | head

Mas é bem lento. Existe uma solução melhor?

    
por usual me 23.09.2014 / 05:42

1 resposta

1

Eu não acho que você pode fazer isso muito mais rápido, já que você precisa primeiro obter a saída de find , que é a operação mais longa, e só então canalizá-la por sort e head .

E se você está mesmo pensando em juntar algum código para fazê-lo funcionar mais rápido, acho que a melhoria (se houver) sobre o uso de find seria insignificante quando comparada com a quantidade de tempo necessária para escrevê-lo e torná-lo mais eficiente que find .

A menos que isso seja algo que você faça regularmente e o conjunto de dados seja enorme (milhares não são muitos), não gastaria meu tempo com ele se fosse você.

    
por Marcin Kaminski 23.09.2014 / 06:14