O comando ls
, ou mesmo a conclusão de tabulação ou a expansão de curinga pelo shell, normalmente apresentará seus resultados em ordem alfanumérica. Isso requer ler toda a listagem de diretórios e classificá-la. Com dez milhões de arquivos em um único diretório, essa operação de classificação levará um tempo não desprezível.
Se você puder resistir ao desejo de completar a tecla TAB e, por exemplo, escrever os nomes dos arquivos a serem zipados na íntegra, não deve haver problemas.
Outro problema com curingas pode ser a expansão de curinga, possivelmente produzindo mais nomes de arquivos do que os que caberão em uma linha de comando de tamanho máximo. O comprimento máximo típico da linha de comando será mais que adequado para a maioria das situações, mas quando estamos falando de milhões de arquivos em um único diretório, isso não é mais uma suposição segura. Quando um comprimento máximo de linha de comando é excedido na expansão de curingas, a maioria das shells simplesmente falha na linha de comando inteira sem executá-la.
Isso pode ser resolvido fazendo suas operações de caractere curinga usando o comando find
:
find <directory> -name '<wildcard expression>' -exec <command> {} \+
ou uma sintaxe semelhante sempre que possível. O find ... -exec ... \+
levará automaticamente em consideração o comprimento máximo da linha de comando e executará o comando quantas vezes forem necessárias, enquanto ajusta a quantidade máxima de nomes de arquivos a cada linha de comando.