46 votes

commande find / grep sans recherche sur les parts montées

Lorsque j'utilise la commande find, j'ai presque toujours besoin de chercher dans les lecteurs locaux. Or, j'ai presque toujours des partages réseau très volumineux qui sont montés et qui sont inclus dans la recherche. Existe-t-il un moyen simple d'exclure ces partages dans la commande find, grep et autres commandes similaires ? Exemple :

find / -name .vimrc

64voto

Keith Sirmons Points 2558

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

find / -mount -name .vimrc

OS X/MacOS fournit la fonction local pseudo-fstype. Ce n'est pas le cas dans GNU find ( fstypes reconnus par GNU find ).

を使用します。 -fstype local à trouver sur MacOS :

find / -fstype local -name .vimrc

Si vous souhaitez exclure uniquement des chemins d'accès spécifiques, vous pouvez utiliser l'option -prune :

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

Mise à jour : MacOS Catalina (Jan 2022)

Je suis à deux versions majeures de la dernière version de MacOS, mais certaines choses ont changé.

Tout d'abord, MacOS prend désormais en charge l'option -mount option. La page de manuel de find dit "La même chose que -xdev, pour la compatibilité avec GNU find".

Deuxièmement, -fstype local semble toujours fonctionner. La page de manuel indique qu'il "correspond à tout système de fichiers physiquement monté sur le système où la recherche est exécutée".

J'ai effectué un test avec deux disques montés dans /Volumes L'une est une clé USB (qui, je pense, est considérée comme physiquement montée) et l'autre un lecteur réseau. J'ai lancé find /Volumes <option> -name '*txt' . Courir avec -mount n'a pas donné de résultats immédiats car il n'y avait pas de tels fichiers sur le système de fichiers actuel. L'exécution avec -fstype local a trouvé un .txt sur la clé USB très rapidement et semble ensuite parcourir la totalité de la clé montée sans renvoyer aucun fichier (même si certains existent).

25voto

penguinjeff Points 349

man find montre :

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

0voto

Shaun Saunders Points 1

La question initiale était de trouver sur le disque local uniquement, 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 configuré correctement, il ne devrait rechercher que les disques locaux, c'est-à-dire que les montages cifs devraient avoir ce drapeau final fixé à 0. J'ai inclus l'OU pour les systèmes de fichiers xfs lorsque nous avons commencé à passer à RHEL7, ils devraient être fixés à 0 également car ils ne sont pas censés effectuer la réorganisation du disque après tant de redémarrages.

J'espère que cela vous aidera.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X