comando find / grep sin buscar recursos compartidos montados

34

Cuando utilicé el comando find, casi siempre necesito buscar las unidades locales. Pero, casi siempre tengo montados recursos compartidos de red súper grandes y estos se incluyen en la búsqueda. ¿Hay alguna manera fácil de excluir aquellos en el comando find, grep y otros comandos similares? Ejemplo:

encontrar / -name .vimrc

Flotsam N. Jetsam
fuente

Respuestas:

46

Use la -fstype localopción para encontrar:

find / -fstype local -name .vimrc

Si desea excluir solo rutas específicas, puede usar -prune:

find / -name /path/to/ignore -prune -o -name .vimrc

Actualizar:

El localpsuedo-fstype está disponible en la versión de find que viene con OS X, pero no está en GNU find ( fstypes reconocido por GNU find ).

Si está utilizando GNU find (como se usa en la mayoría de los sistemas Linux), en su lugar querrá usar -mount:

find / -mount -name .vimrc
Doug Harris
fuente
¿eso también funciona para grep?
Flotsam N. Jetsam
1
No creo que grep tenga esa opción. Usualmente usé findpipe to grepcomo se muestra en esta respuesta: superuser.com/questions/80033/… . Últimamente, he estado usando ack( betterthangrep.com ) en su lugar, pero ackno parece tener una opción para buscar solo unidades locales.
Doug Harris
Mi edición fue rechazada por esto, así que solo lo hice un comentario. Básicamente, el primer ejemplo es incorrecto, porque necesita agregarlo -pruneo aún atravesará los sistemas de archivos no deseados. El segundo ejemplo, creo que estaba destinado a ser en -pathlugar de -namepor lo que ignorará el camino. FWIW ... el último ejemplo funciona, permanece en el "sistema de archivos actual", por lo que no atraviesa otros.
rogerdpack
20

man find muestra:

-xdev No descienda directorios en otros sistemas de archivos.

penguinjeff
fuente
2
-xdeves lo mismo que -mountFWIW ... :)
rogerdpack
0

La pregunta original era encontrar solo en el disco local, así que, para completar, esto es lo que usé;

for PART in `awk '(!/^#/ && $6 != "0" || $3 == "xfs" ) { print $2 }' /etc/fstab 2>/dev/null`; do find $PART -xdev -name .vimrc -print 2>/dev/null; done

Siempre que su fstab esté configurado correctamente, solo debería buscar en los discos locales; es decir, los montajes cifs deberían tener ese indicador final establecido en 0. Incluí el OR para los sistemas de archivos xfs cuando comenzamos a ir a RHEL7, también deberían establecerse en 0, ya que no están destinados a hacer la reorganización del disco después de tantos reinicios.

Espero que ayude.

Shaun Saunders
fuente