Comment puis-je trouver récursivement tous les fichiers dans les sous-dossiers actuels et actuels en fonction de la correspondance générique?
Utilisez find pour cela:
find . -name "foo*"
find
a besoin d'un point de départ et le .
(point) pointe vers le répertoire en cours.
Piping find dans grep est souvent plus pratique; il vous donne toute la puissance des expressions régulières pour la correspondance générique arbitraire.
Par exemple, pour trouver tous les fichiers avec la chaîne "foo" insensible à la casse dans le nom du fichier:
~$ find . -print | grep -i foo
find
trouvera tous les fichiers correspondant à un modèle:
find . -name "*foo"
Cependant, si vous voulez une image:
tree -P "*foo"
J'espère que cela t'aides!
Si votre shell prend en charge une nouvelle option de globbing (peut être activé avec: shopt -s globstar
), vous pouvez utiliser:
echo **/*foo*
pour rechercher des fichiers ou des dossiers de manière récursive. Ceci est supporté par Bash 4, zsh et autres shells similaires.
Personnellement j'ai cette fonction Shell définie:
f() { find . -name "*$1*"; }
Remarque: La ligne ci-dessus peut être collée directement dans Shell ou ajoutée au fichier ~/.bashrc
de votre utilisateur.
Ensuite, je peux rechercher tous les fichiers en tapant:
f some_name
Vous pouvez également utiliser un utilitaire fd
avec une syntaxe simple, par exemple. fd pattern
.
find -L . -name "foo*"
Dans quelques cas, j'ai eu besoin du paramètre -L pour gérer les liens de répertoires symboliques. Par défaut, les liens symboliques sont ignorés. Dans ces cas, c'était assez déroutant, car je changeais de répertoire en sous-répertoire et voyais le fichier correspondant au modèle, mais find ne renverrait pas le nom de fichier. L'utilisation de -L résout ce problème. Les options de lien symbolique pour rechercher sont -P -L -H
find <directory_path> -type f -name "<wildcard-match>"
Dans la correspondance générique, vous pouvez fournir la chaîne que vous souhaitez faire correspondre, par exemple. * .c (pour tous les fichiers c)
fd
Si find
est trop lent, essayez l'utilitaire fd
- une alternative simple et rapide à find
écrite en rouille.
Syntaxe:
fd PATTERN
Démo:
Page d'accueil: https://github.com/sharkdp/fd
Vous pouvez utiliser:
# find . -type f -name 'text_for_search'
Si vous voulez utiliser REGX, utilisez -iname
# find . -type f -iname 'text_for_search'
Manière par défaut de rechercher un fichier récursif, et disponible dans la plupart des cas est
find . -name "filepattern"
Il commence la traversée récursive pour le nom de fichier ou le modèle à partir du répertoire actuel dans lequel vous êtes positionné. Avec la commande find, vous pouvez utiliser des caractères génériques, et divers commutateurs, pour voir la liste complète des options, tapez
man find
ou si les pages de manuel ne sont pas disponibles sur votre système
find --help
Cependant, il existe des outils plus modernes et plus rapides que la recherche, qui parcourent l’ensemble du système de fichiers et indexent vos fichiers. Un de ces outils communément appelé localiser ou slocate/mlocate, vous devriez vérifier installé, il doit initialiser la base de données; si le script d'installation ne le fait pas pour vous, vous pouvez le faire manuellement en tapant
Sudo updatedb
Et, l'utiliser pour rechercher un type de fichier particulier
locate filename
Ou, pour rechercher un nom de fichier ou un modèle dans le répertoire actuel, vous pouvez taper:
pwd | xargs -n 1 -I {} locate "filepattern"
Il examinera dans sa base de données de fichiers et imprimera rapidement les noms de chemins correspondant au motif que vous avez saisi. Pour voir la liste complète des options de localisation, tapez: locate --help
ou man locate
De plus, vous pouvez configurer la commande localize pour mettre à jour sa base de données à l’heure prévue via le travail cron. Par conséquent, un exemple de cron qui met à jour la base de données à 1 heure ressemble à ceci:
0 1 * * * updatedb
Ces tâches cron doivent être configurées par root, car updatedb a besoin du privilège root pour parcourir tout le système de fichiers.
pour la recherche de fichier find / -xdev -name settings.xml
-> ordinateur complet find ./ -xdev -name settings.xml
-> répertoire actuel et son sous-répertoire
pour les fichiers avec type d'extension
find . -type f -name "*.iso"
La commande ci-dessous permet de rechercher des fichiers
1) Indépendamment de l'affaire
2) Résultat Exclusion de dossiers sans autorisation
3) Recherche à partir de la racine ou du chemin que vous aimez. Changez/avec le chemin que vous préférez.
Syntaxe:
find -iname '' 2> & 1 | grep -v "Autorisation refusée"
Exemple
find/-iname 'C * .xml' 2> & 1 | grep -v "Autorisation refusée"
find / -iname '*C*.xml' 2>&1 | grep -v "Permission denied"
La commande suivante listera tous les fichiers ayant le nom exact "pattern" (par exemple) dans le sous-répertoire et ses sous-répertoires.
find ./ -name "pattern"
Ceci recherchera tous les fichiers liés dans les sous-répertoires courants et sous-jacents, en calculant leur nombre de lignes séparément et totalement:
find . -name "*.wanted" | xargs wc -l
Si vous souhaitez rechercher un fichier spécial avec un caractère générique, vous pouvez utiliser le code suivant:
find . -type f -name "*.conf"
Supposons que vous souhaitiez rechercher tous les fichiers .conf à partir d'ici:
.
signifie que la recherche a commencé à partir d'ici (lieu actuel)-type
signifie le type d'élément de recherche qui est ici le fichier (f).-name
signifie que vous voulez rechercher des fichiers avec * .conf noms.