Tengo una estructura de directorio como esta
data
|___
|
abc
|____incoming
def
|____incoming
|____processed
123
|___incoming
456
|___incoming
|___processed
Hay 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 '*.*' -print
pero no funciona como se esperaba.
Ravi
grep -v something
para 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/incoming
como parte de su ruta-not -path "*456/incoming*"
: no incluya nada456/incoming
como parte de su rutafuente
-path
coincide con toda la cadena, por lo que si lo está haciendofind .
, entonces sus-path
cadenas deben ser./path/to/directory/*
-not -path
definitivamente funcionará en este ejemplo, perofind
aún está iterando en la estructura de directorios y utilizando ciclos de CPU para iterar sobre todos esos directorios / archivos. para evitarfind
iterar sobre esos directorios / archivos (tal vez haya millones de archivos allí), entonces debe usar-prune
(la-prune
opció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
prune
sea tu amigo mientras-not -path
que 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
-name
solo coincide con el nombre del archivo, no con la ruta completa. En su-path
lugar, desea utilizar para las partes en las que está podando los directorios comodef/incoming
.fuente
fuente
find ... -print0
junto con un posteriorxargs -0
Siguiendo esto, Cómo excluir un directorio en find. comando :
fuente