Tengo una estructura de directorio como esta
data
|___
   |
   abc
    |____incoming
   def
    |____incoming
    |____processed
   123
    |___incoming
   456
    |___incoming
    |___processedHay una subcarpeta entrante en todas las carpetas dentro del directorio de datos. Quiero obtener todos los archivos de todas las carpetas y subcarpetas excepto los directorios def / entrante y 456 / entrante. Probé con el siguiente comando
 find /home/feeds/data -type d \( -name 'def/incoming' -o -name '456/incoming' -o -name arkona \) -prune -o -name '*.*' -printpero no funciona como se esperaba.
Ravi

grep -v somethingpara excluir lo que sea que no quierasRespuestas:
Esto funciona:
Explicación:
find /home/feeds/data: comienza a buscar de forma recursiva desde la ruta especificada-type f: buscar archivos solamente-not -path "*def/incoming*": no incluya nadadef/incomingcomo parte de su ruta-not -path "*456/incoming*": no incluya nada456/incomingcomo parte de su rutafuente
-pathcoincide con toda la cadena, por lo que si lo está haciendofind ., entonces sus-pathcadenas deben ser./path/to/directory/*-not -pathdefinitivamente funcionará en este ejemplo, perofindaún está iterando en la estructura de directorios y utilizando ciclos de CPU para iterar sobre todos esos directorios / archivos. para evitarfinditerar sobre esos directorios / archivos (tal vez haya millones de archivos allí), entonces debe usar-prune(la-pruneopción es difícil de usar).Solo por el bien de la documentación: es posible que deba profundizar más, ya que hay muchas constelaciones de búsqueda y omisión (como tuve que hacerlo). Puede resultar que
prunesea tu amigo mientras-not -pathque no hará lo que esperas.Así que este es un valioso ejemplo de 15 ejemplos de búsqueda que excluyen directorios:
http://www.theunixschool.com/2012/07/find-command-15-examples-to-exclude.html
Para vincular a la pregunta inicial, la exclusión finalmente funcionó para mí así:
Luego, si desea encontrar un archivo y aún excluir parches, simplemente agregue
| grep myFile.txt.También puede depender de su versión de búsqueda. Veo:
fuente
-namesolo coincide con el nombre del archivo, no con la ruta completa. En su-pathlugar, desea utilizar para las partes en las que está podando los directorios comodef/incoming.fuente
fuente
find ... -print0junto con un posteriorxargs -0Siguiendo esto, Cómo excluir un directorio en find. comando :
fuente