commande find / grep sans rechercher de partages montés

34

Lorsque j'ai utilisé la commande find, j'ai presque toujours besoin de rechercher les lecteurs locaux. Mais, j'ai presque toujours des partages réseau super grands montés et ceux-ci sont inclus dans la recherche. Existe-t-il un moyen facile d'exclure ceux de la commande find, grep et d'autres commandes similaires? Exemple:

trouver / -name .vimrc

Flotsam N. Jetsam
la source

Réponses:

46

Utilisez l' -fstype localoption pour trouver:

find / -fstype local -name .vimrc

Si vous souhaitez exclure uniquement des chemins spécifiques, vous pouvez utiliser -prune:

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

Mise à jour:

Le localpsuedo-fstype est disponible dans la version de find fournie avec OS X, mais n'est pas dans GNU find ( fstypes reconnus par GNU find ).

Si vous utilisez GNU find (comme c'est le cas sur la plupart des systèmes Linux), vous voudrez plutôt utiliser -mount:

find / -mount -name .vimrc
Doug Harris
la source
cela fonctionne-t-il aussi pour grep?
Flotsam N. Jetsam
1
Je ne pense pas que grep ait une telle option. J'ai généralement utilisé le findtuyau grepcomme indiqué dans cette réponse: superuser.com/questions/80033/… . Dernièrement, j'ai utilisé ack( betterthangrep.com ) à la place, mais ackil ne semble pas avoir la possibilité de rechercher uniquement les lecteurs locaux.
Doug Harris
Ma modification a été rejetée, donc faites-en simplement un commentaire. Fondamentalement, le premier exemple est erroné, car vous devez y ajouter -pruneou il traversera toujours les systèmes de fichiers indésirables. Le deuxième exemple, je crois, était censé être -pathau lieu de, -namedonc il ignorera le chemin. FWIW ... le dernier exemple fonctionne, il reste sur le "système de fichiers actuel" donc ne traverse pas les autres.
rogerdpack
20

man find spectacles:

-xdev Ne descendez pas de répertoires sur d'autres systèmes de fichiers.

pingouinjeff
la source
2
-xdevest le même que -mountFWIW ... :)
rogerdpack
0

La question d'origine était de trouver uniquement sur le disque local, donc par souci d'exhaustivité, voici ce que j'ai utilisé;

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

Tant que votre fstab est correctement configuré, il ne doit rechercher que les disques locaux; c'est-à-dire que les montages cifs devraient avoir cet indicateur final défini sur 0. J'ai inclus l'OR pour les systèmes de fichiers xfs lorsque nous avons commencé à passer à RHEL7, ils devraient également être définis sur 0 car ils ne sont pas censés faire la réorganisation du disque après tant de redémarrages.

J'espère que ça t'as aidé.

Shaun Saunders
la source