procurando um grande número de nomes de arquivos possíveis na árvore de diretórios grande

0

Eu preciso procurar em uma grande árvore de diretórios por um grande número de nomes de arquivos possíveis, ou seja, eu tenho um arquivo de entrada com uma longa lista de strings que eu preciso encontrar na árvore (ou como abaixo: imprima todos aqueles que são não na árvore)

Como uma solução baseada em sistema de arquivos, posso fazer algo assim:

while read a;
do
    count='find /path/to/dir -name "*$a*" | wc -l'; ;
    if [ $count -eq 0 ];
    then
    echo $a;
    fi
done < inputnames.txt

, que é altamente ineficiente, dado o tamanho da árvore e o tamanho do arquivo de entrada. Então imaginei que poderia simplesmente despejar a saída de find em um arquivo

find /path/to/dir > pathtodir_tree.txt

e depois grep o arquivo.

while read a;
do
    count='grep $a pathtodir_tree.txt | wc -l';
    if [ $count -eq 0 ];
    then
    echo $a;
    fi
done < inputnames.txt

que é muito mais rápido. Minhas perguntas são: estou faltando uma solução mais eficiente baseada em sistema de arquivos? Caso contrário, existe outra solução que seja mais eficiente (ou geralmente melhor) do que a solução baseada no grep que estou propondo?

    
por Erik 12.08.2014 / 12:28

1 resposta

0

Isso funciona para mim (se você quiser encontrar esses arquivos não correspondentes; caso contrário, omitir o v da opção grep):

find /path/to/dir > tree.txt
grep -vf inputnames.txt tree.txt

E se você quiser saber quantos existem: grep -vf inputnames.txt tree.txt | wc -l

Isso encontra / conta todas as ocorrências em tree.txt que não correspondem a qualquer string em inputnames.txt .

    
por 12.08.2014 / 16:31

Tags