Réponses:
Utilisez find pour cela:
find . -name "foo*"
finda besoin d'un point de départ et le .(point) pointe vers le répertoire courant.
find . foo*, le foo*serait étendu ET ALORS passé à trouver.
" "convient de souligner que cela est très nécessaire pour la recherche récursive.
find . -name "foo*" 2>/dev/null
Tuyauter trouver dans grep est souvent plus pratique; il vous donne toute la puissance des expressions régulières pour la correspondance arbitraire de caractères génériques.
Par exemple, pour rechercher tous les fichiers avec la chaîne insensible à la casse "foo" dans le nom de fichier:
~$ find . -print | grep -i foo
finda également les -iname, -regexet des -iregexdrapeaux pour caractère générique insensible à la casse, regex, et la correspondance regex insensible à la casse, de sorte que la tuyauterie à grepn'est pas nécessaire.
findcommande qui prend en charge ces options. Devient parfois grepla seule option.
find trouvera tous les fichiers qui correspondent à un modèle:
find . -name "*foo"
Cependant, si vous voulez une photo:
tree -P "*foo"
J'espère que cela t'aides!
brew install treepour les utilisateurs de Mac OSX sans apt-getinstallation
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 changerais de répertoire en sous-répertoire et verrais le fichier correspondant au modèle mais find ne retournerait pas le nom de fichier. L'utilisation de -L résout ce problème. Les options de lien symbolique pour la recherche sont -P -L -H
Si votre shell prend en charge une nouvelle option de globbing (peut être activée parshopt -s globstar , vous pouvez utiliser:
echo **/*foo*
pour rechercher tous les fichiers ou dossiers de manière récursive. Ceci est supporté par Bash 4, zsh et des shells similaires.
Personnellement, j'ai défini cette fonction shell:
f() { find . -name "*$1*"; }
Remarque: la ligne ci-dessus peut être collée directement dans le shell ou ajoutée dans le ~/.bashrcfichier de votre utilisateur .
Ensuite, je peux rechercher n'importe quel fichier en tapant:
f some_name
Alternativement, vous pouvez utiliser un fdutilitaire avec une syntaxe simple, par exemple fd pattern.
shopt -s globstarcommande globbing étendue par . Ceci est pris en charge dans Bash, zsh et similaires.
bash-3.2$ shopt -s globstardonnebash: shopt: globstar: invalid shell option name
fdDans le cas, findest trop lent, essayez l' fdutilitaire - une alternative simple et rapide à l' findécriture en rouille.
Syntaxe:
fd PATTERN
Démo:
Page d'accueil: https://github.com/sharkdp/fd
asciicast2vectorpeut probablement être utilisé.
find <directory_path> -type f -name "<wildcard-match>"
Dans le caractère générique, vous pouvez fournir la chaîne que vous souhaitez faire correspondre, par exemple * .c (pour tous les fichiers c)
Vous pouvez utiliser:
# find . -type f -name 'text_for_search'
Si vous voulez utiliser REGX utiliser -iname
# find . -type f -iname 'text_for_search'
La 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 depuis le répertoire courant où vous êtes positionné. Avec la commande find, vous pouvez utiliser des caractères génériques et divers commutateurs pour afficher 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 à trouver, qui parcourent l'ensemble de votre système de fichiers et indexent vos fichiers, un de ces outils courants est de localiser ou de slacer / mlocate, vous devriez vérifier le manuel de votre système d'exploitation sur la façon de l'installer, et une fois qu'il est installé, il doit lancer la base de données, si le script d'installation ne le fait pas pour vous, il peut être fait manuellement en tapant
sudo updatedb
Et, pour l'utiliser pour rechercher un type de fichier particulier
locate filename
Ou, pour rechercher un nom de fichier ou un motif dans le répertoire actuel, vous pouvez taper:
pwd | xargs -n 1 -I {} locate "filepattern"
Il parcourra sa base de données de fichiers et imprimera rapidement les noms de chemin correspondant au modèle que vous avez tapé. Pour voir la liste complète des options de localisation, tapez:
locate --helpouman locate
De plus, vous pouvez configurer Locate pour mettre à jour sa base de données à des heures planifiées via un travail cron, donc un exemple de cron qui met à jour db à 1h du matin ressemblerait à:
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.
Je suis surpris de voir que la localisation n'est pas très utilisée lorsque nous devons y aller récursivement.
Je voudrais d'abord localiser "$ PWD" pour obtenir la liste des fichiers dans le dossier courant d'intérêt, puis exécuter des greps à leur guise.
locate "$PWD" | grep -P <pattern>
Bien sûr, cela suppose que la mise à jour est effectuée et que l'index est mis à jour périodiquement. C'est un moyen beaucoup plus rapide de rechercher des fichiers que d'exécuter une recherche et de lui demander de descendre dans l'arborescence. Mentionnant cela pour être complet. Rien contre l'utilisation de find, si l'arbre n'est pas très lourd.
locate "$PWD*.mp4" Juste pour rappeler que vous pourriez être en mesure de sauter lagrep
La commande ci-dessous permet de rechercher tous les fichiers
1) Quel que soit le cas
2) Résultat Exclure les dossiers sans autorisation
3) Rechercher à 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"
find / -iname '*C*.xml' 2>/dev/null
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 (emplacement actuel)
-typesignifie le type d'élément de recherche qui est ici le fichier (f).
-namesignifie que vous souhaitez rechercher des fichiers avec des noms * .conf .
Utilisation
find path/to/dir -name "*.ext1" -o -name "*.ext2"
Explication
findrécursivité.-oreprésente -or. Donc, ci-dessus signifie rechercher ce caractère générique OU celui-ci. Si vous n'avez qu'un seul motif, alors pas besoin de -o.