5 votes

Comment utiliser trouver tranquillement?

Je veux rechercher toutes les occurrences de sur ma machine. Maintenant, lorsque je fais une recherche comme celle-ci

find / 

Je peux voir tous les chemins à travers lesquels la recherche s'effectue. Comment puis-je limiter les résultats à mon terme de recherche?

Exemple abstrait

J'ai un dossier, appelons-le mon-propre-dossier. Maintenant, quand je veux savoir s'il y a d'autres dossiers avec le même nom et que je lance une recherche pour

find / mon-propre-dossier

la sortie montre quelques centaines de lignes comme ceci

/var/www/mon-propre-dossier/index.php
/var/www/mon-propre-dossier/lib/1.php
/var/www/mon-propre-dossier/templates/2.php
/var/www/mon-propre-dossier/log/3.log

suivies par des milliers d'autres lignes (~ 380k lignes) contenant /usr, /lib, /proc, /var et ainsi de suite, par exemple:

/etc/gshadow
/etc/fonts
/dev/ram7
/media/user
/run/udev/watch
/bin/gzexe
/vmlinuz
/lost+found

Et les lignes ne contiennent pas mon-propre-dossier. Je doute fortement qu'ils soient tous liés à ce dossier. Alors pourquoi sont-ils affichés?

Exemple précis

Je veux appliquer un correctif pour openldap mais je ne sais pas où je peux trouver le dossier pour exécuter le correctif. Donc lorsque je recherche

find / openldap
find / slapd

il semble afficher tous les emplacements où la recherche est effectuée, et non seulement les occurrences de openldap ou slapd.

Mise à jour

Ma faute était de ne pas utiliser -name dans ma recherche comme ceci

find / -name ""

6voto

Maythux Points 77506

Vous pouvez utiliser redirection:

find /  2>/dev/null

Cela redirige toutes les erreurs vers le dispositif null /dev/null.

par exemple:

 # find / -name StewieGriffin\*
/root: Permission denied
/home/peterg: Permission denied
/home/stewie/StewieGriffin-resume.doc

Sera converti en

# find / -name StewieGriffin\* 2>/dev/null
/home/stewie/StewieGriffin-resume.doc

Veuillez consulter ce lien.

1voto

Sergiy Kolodyazhnyy Points 97292

Pour limiter la quantité de sortie, vous pouvez utiliser soit head soit tail pour lire les premiers ou les derniers x termes. Par exemple,

$ find . -iname "*test*" | head -n 10
find: `./.cache/dconf'./xterm-297/tektests
./xterm-297/tektests/imtesth.tek
./xterm-297/tektests/fotest.tek
./xterm-297/tektests/aitest.tek
./xterm-297/tektests/imtest.tek
./xterm-297/testxmc.c
./xterm-297/Tests
./xterm-297/vttests
./test.c
: Permission denied./file2.test

Vous pouvez également utiliser less pour visualiser la sortie de manière pratique avec les boutons page haut / bas.

find / -type d -name "nomdudossier" | less

Vous pouvez également utiliser ! -path pour indiquer à find d'ignorer certains dossiers spécifiques

find . ! -path /dossierquelconque/autredossier -iname "termerecherche"

Ou utilisez grep -v terminevoulupas. Le drapeau -v permet d'ignorer ce que vous ne voulez pas voir dans la sortie

find . -name "termerecherche" | grep -v jerenveuxpasçà `

Find permet de spécifier quel type de fichier vous voulez rechercher. Si vous voulez rechercher des dossiers, le type est d. Pour rechercher tous les dossiers du système nommés test, exécutez ceci :

find / -type d -name "test"

Voici un exemple concret pour rechercher un répertoire exact sur mon système :

$ sudo find / -type d -name "bin"                                              
/home/xieerqi/bin
/usr/lib/initramfs-tools/bin
/usr/lib/klibc/bin
/usr/lib/pm-utils/bin
/usr/lib/2013.com.canonical.certification:checkbox/bin
/usr/lib/i386-linux-gnu/qt4/bin
/usr/lib/ure/bin
/usr/lib/2013.com.canonical.certification:plainbox-resources/bin
/usr/lib/python3/dist-packages/plainbox/impl/providers/stubbox/bin
/usr/lib/guile-2.0/bin
/usr/share/qt4/bin
/usr/share/libreoffice/bin
/usr/src/linux-headers-3.16.0-30/tools/testing/selftests/rcutorture/bin
/usr/local/bin
/usr/bin
/bin

Si je veux ignorer les entrées /usr/, je lance ceci :

$ sudo find /   -type d -name "bin" | grep -v '\/usr\/*'                       
/home/xieerqi/bin
/bin

Pour ignorer les répertoires /usr, /lib, /proc, /var , changez grep comme ceci

grep -v '\/usr\/*\|\/lib\/*\|\/proc\/*\|\/var\/*'

1voto

elmato Points 111

Comme vous l'avez découvert, -name est le drapeau à utiliser car il est intégré à find. Comme solution plus générale qui vous couvrira lorsque d'autres applications n'ont pas d'outil pour rationnaliser les résultats de recherche (comme apt-get par exemple) vous pouvez utiliser grep.

find /  | grep

0voto

krt Points 1818

N'utilisez pas d'espace entre / et my-own-folder. Définissez le chemin complet du dossier comme ceci :

# find /var/www/my-own-folder

Cela affichera uniquement le contenu de my-own-folder.

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