traicion - Unix encuentra el directorio con el archivo perdido
sujeto 16 (3)
¿Cómo puedo usar find
para identificar aquellos directorios que no contienen un archivo con un nombre específico? Quiero crear un archivo que contenga una lista de todos los directorios que pierden un determinado archivo.
Buscar directorios:
find -type d > DIRS
Buscar directorios con el archivo:
find -type f -name ''SpecificName'' | sed ''s!/[^/]*$!!'' > FILEDIRS
Encuentra la diferencia:
grep DIRS -vf FILEDIRS
Este es un ejemplo para un archivo main.cpp. En el ejemplo, se encuentran todos los directorios que no contienen main.cpp en ellos. Como ve, primero obtengo una lista de todas las carpetas, luego obtengo una lista de las carpetas que tienen main.cpp y luego ejecuto diff
para obtener una diferencia entre las dos listas:
diff /
<(find . -exec readlink -f {} /; | sed ''s//(.*/)//.*$//1/'' | sort | uniq) /
<(find . -name main.cpp -exec readlink -f {} /; | sed ''s//(.*/)//.*$//1/'' | sort | uniq) /
| sed -n ''s/< /(.*/)//1/p''
Hay varias formas diferentes de abordar esto: este es el enfoque que tomaría (supuso bash
):
while read d
do
[[ -r ${d}/SpecificFile.txt ]] || echo ${d}
done < <(find . -type d -print)
Si sus directorios de destino solo existen a cierta profundidad, existen otras opciones que puede agregar para find
para limitar el número de directorios que se verificarán ...