Esta pregunta ya tiene respuestas aquí :
Comentarios
Respuesta
Esto es para lo que es la opción -prune
:
find . -type d -name "avoid_this_directory_please" -prune -o -type f -print
Esto básicamente dice «si hay» un directorio llamado avoid_this_directory_please
, no lo ingrese, de lo contrario, si es «un archivo normal, imprima su ruta».
Comentarios
- iba a escribir lo mismo, ligeramente diferente, como
find . \( -type d -name 'avoid_this_directory_please' -prune \) -o \( -type f -print \)
, pero me gusta más tu sintaxis. Gracias.
- @TimKennedy Probablemente necesitarías los parens si quisieras hacer
find . -type d \( -name "A" -o -name "B" \) -prune -o -type f -print
.
- buen punto. No ' ni siquiera sé cuándo / dónde aprendí a hacerlo entre paréntesis. esa edad se pierde en las brumas del tiempo. 🙂
- Esto, por supuesto, eliminará cualquier directorio llamado
avoid_this_directory_please
en cualquier parte del árbol, no solo los de nivel superior. -path
permitiría un mayor control en eso, ya que la página de manual ( citado a continuación por Xen2050) afirma.
- No sabía que
-prune
consideraba todo después del primer find
argumento, incluido -type
y estaba desconcertado por no podar directorios con find / -type f -path /proc -prune -o -name foo -print
. Ver tanto -type d
como -type f
en el mismo comando es lo que me hizo hacer clic. Ahora finalmente me siento seguro de usar find
, gracias.
Responder
Para evitar un directorio, pruebe la prueba -path:
find . -type f ! -path "*/avoid_this_directory_please/*"
Comentarios
Responder
De man find
, en la sección -path
, aparentemente combinando las otras 2 respuestas
To ignore a whole directory tree, use -prune rather than checking every file in the tree. For example, to skip the directory `src/emacs" and all files and directories under it, and print the names of the other files found, do something like this: find . -path ./src/emacs -prune -o -print
Responder
Pruebe esto
find -name "*.js" -not -path "./directory/*"
Comentarios