Réponses:
Utilisez find pour cela:
find . -name "foo*"
find
a 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
find
a également les -iname
, -regex
et des -iregex
drapeaux pour caractère générique insensible à la casse, regex, et la correspondance regex insensible à la casse, de sorte que la tuyauterie à grep
n'est pas nécessaire.
find
commande qui prend en charge ces options. Devient parfois grep
la 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 tree
pour les utilisateurs de Mac OSX sans apt-get
installation
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 ~/.bashrc
fichier de votre utilisateur .
Ensuite, je peux rechercher n'importe quel fichier en tapant:
f some_name
Alternativement, vous pouvez utiliser un fd
utilitaire avec une syntaxe simple, par exemple fd pattern
.
shopt -s globstar
commande globbing étendue par . Ceci est pris en charge dans Bash, zsh et similaires.
bash-3.2$ shopt -s globstar
donnebash: shopt: globstar: invalid shell option name
fd
Dans le cas, find
est trop lent, essayez l' fd
utilitaire - une alternative simple et rapide à l' find
écriture en rouille.
Syntaxe:
fd PATTERN
Démo:
Page d'accueil: https://github.com/sharkdp/fd
asciicast2vector
peut 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 --help
ouman 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)
-type
signifie le type d'élément de recherche qui est ici le fichier (f).
-name
signifie que vous souhaitez rechercher des fichiers avec des noms * .conf .
Utilisation
find path/to/dir -name "*.ext1" -o -name "*.ext2"
Explication
find
récursivité.-o
repré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
.