GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo excluir un directorio en find. dominio

Si -prune no funciona para usted, esto:

find -name "*.js" -not -path "./directory/*"

Advertencia: requiere recorrer todos los directorios no deseados.


Usa el -prune primario. Por ejemplo, si desea excluir ./misc :

find . -path ./misc -prune -o -name '*.txt' -print

Para excluir varios directorios, O entre paréntesis.

find . -type d \( -path ./dir1 -o -path ./dir2 -o -path ./dir3 \) -prune -o -name '*.txt' -print

Y, para excluir directorios con un nombre específico en cualquier nivel, use el -name principal en lugar de -path .

find . -type d -name node_modules -prune -o -name '*.json' -print

Encuentro más fácil razonar sobre lo siguiente que sobre otras soluciones propuestas:

find build -not \( -path build/external -prune \) -name \*.js
# you can also exclude multiple paths
find build -not \( -path build/external -prune \) -not \( -path build/blog -prune \) -name \*.js

Nota importante: las rutas que escribes después de -path debe coincidir exactamente con lo que find imprimiría sin la exclusión. Si esta oración lo confunde, asegúrese de usar rutas completas en todo el todo comando como este:find /full/path/ -not \( -path /full/path/exclude/this -prune \) ... . Consulte la nota [1] si desea una mejor comprensión.

Dentro de \( y \) es una expresión que coincidirá exactamente build/external (consulte la nota importante anterior) y, si tiene éxito, evitará atravesar cualquier cosa que se encuentre debajo . Esto luego se agrupa como una sola expresión con el paréntesis escapado y se antepone con -not lo que hará find omita todo lo que coincida con esa expresión.

Uno podría preguntarse si agregar -not no hará que todos los demás archivos estén ocultos por -prune reaparecer, y la respuesta es no. El camino -prune funciona es que cualquier cosa, una vez que se alcanza, los archivos debajo de ese directorio se ignoran permanentemente.

Esto proviene de un caso de uso real, en el que necesitaba llamar a yui-compressor en algunos archivos generados por wintersmith, pero omití otros archivos que deben enviarse tal cual.

Nota [1] :Si desea excluir /tmp/foo/bar y ejecuta find así "find /tmp \(... "entonces debes especificar -path /tmp/foo/bar . Si por el contrario ejecutas find así cd /tmp; find . \(... entonces debes especificar -path ./foo/bar .


Linux
  1. Cómo encontrar el número de archivos en un directorio y subdirectorios

  2. ¿Cómo integrar el comando Mv después del comando Buscar?

  3. ¿Excluir directorio en Buscar?

  4. ¿Buscar directorio de exclusión?

  5. Shell - ¿Cómo encontrar el directorio de algún comando?

Cómo mover un directorio en Linux

Cómo excluir en el comando Grep en Linux

Cómo excluir un directorio al buscar archivos en Linux

Cómo contar archivos en el directorio en Linux

Cómo encontrar la dirección IP en la línea de comandos de Linux

El comando find Directory de Linux:Explicación