¿Cómo excluir directorios NFS con find?

9

Necesito buscar archivos que no tengan usuario O que no tengan grupo.

find / -nouser -o -nogroup

Creo que esto esta bien. Pero, no quiero buscar recursos compartidos de NFS. ¿Cómo puedo excluir los recursos compartidos de NFS en el comando find?

Gasko Peter
fuente
2
Pruebe find / -fstype ext4 -nouser -o -nogroupSustituir ext3, etc. si no está usando ext4
doneal24
1
por favor publique esto como respuesta
gasko peter
@ DougO'Neal deberías publicar eso como respuesta.
Tim Kennedy
1
@ DougO'Neal, eso no dejaría findde descender a nfs FS, solo para no imprimir los archivos que encontraría allí.
Stéphane Chazelas
Para usar -exec con algo como ducombinar -fstypey -xdev(aka -mount) parece necesario
Gert van den Berg

Respuestas:

7

Con GNU find, puede usar el -fstypepredicado:

find / -fstype nfs -prune -o \( -nouser -o -nogroup \) -print

Dicho esto, el enfoque de hymie probablemente tenga más sentido: haga una lista blanca de los FS que desea buscar en lugar de incluir en la lista negra los que no desea buscar.

Si solo desea incluir jfs2sistemas de archivos (suponiendo que /esté activado jfs2), debe escribirlo:

find / ! -fstype jfs2 -prune -o \( -nouser -o -nogroup \) -print

No lo escribas:

find / -fstype jfs2 \( -nouser -o -nogroup \) -print

Mientras que eso dejaría findde imprimir archivos en un sistema de archivos que no sea jfs2, eso no evitaría que rastree esos sistemas de archivos que no son jfs2 (que necesita -prune).

Tenga en cuenta que -a( AND, que está implícito si se omite) tiene prioridad sobre -o( OR ), por lo que debe observar si se necesitan paréntesis o no.

El comando correcto anterior es la abreviatura de:

find / \( \( ! -fstype jfs2 \) -a -prune \) -o \
  \( \( -nouser -o -nogroup \) -a -print \)
Stéphane Chazelas
fuente
10

Lo más probable es que lo use -xdev, lo que significa "No descienda directorios en otros sistemas de archivos". A continuación, tendrá que especificar qué sistemas de archivos que no desea realizar la búsqueda.

hymie
fuente