buscar una gran cantidad de posibles nombres de archivos en un gran árbol de directorios

buscar una gran cantidad de posibles nombres de archivos en un gran árbol de directorios

Necesito buscar en un árbol de directorios grande una gran cantidad de nombres de archivos posibles, es decir, tengo un archivo de entrada con una larga lista de cadenas que necesito encontrar en el árbol (o como se muestra a continuación: imprimir todos los que no están en el árbol). árbol)

Como solución basada en un sistema de archivos, puedo hacer algo como esto:

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

lo cual es tremendamente ineficiente dado el tamaño del árbol y el tamaño del archivo de entrada. Entonces pensé que podría simplemente volcar la salida finden un archivo

find /path/to/dir > pathtodir_tree.txt

y luego grep el archivo.

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

que es mucho más rápido. Mis preguntas son: ¿me falta una solución basada en un sistema de archivos más eficiente? Si no es así, ¿existe otra solución que sea más eficiente (o, en general, mejor) que la solución basada en grep que propongo?

Respuesta1

Esto funciona para mí (si quieres encontrar esos archivosnopareo; de lo contrario, omita la v de la opción grep):

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

Y si quieres saber cuantos hay:grep -vf inputnames.txt tree.txt | wc -l

Esto busca/cuenta todas las ocurrencias en tree.txt que nonocoincide con cualquiera de las cadenas en inputnames.txt.

información relacionada