Disons qu'il y a des fichiers avec des noms:
batman.c
debate.c
cricketbat.c
Quelle commande et comment dois-je l'utiliser pour répertorier tous ces fichiers en utilisant la balise de recherche bat?
Disons qu'il y a des fichiers avec des noms:
batman.c
debate.c
cricketbat.c
Quelle commande et comment dois-je l'utiliser pour répertorier tous ces fichiers en utilisant la balise de recherche bat?
Réponses:
batn'importe oùPour trouver tous les fichiers n'importe où à l'intérieur /path/to/folderdont les noms contiennent bat, vous pouvez utiliser:
find /path/to/folder -name '*bat*'
J'ai cité le modèle de recherche *bat*parce que, si les citations ont été omis et les fichiers correspondent *bat*dans le répertoire courant, la coquille se développera *bat*dans une liste d'entre eux et passer que pour find. ensuitefind ça ne marcherait pas bien. ( \*bat\*et "*bat*"aussi travailler.)
Pour rechercher dans le dossier dans lequel vous vous trouvez actuellement (par exemple, dans lequel vous avez cdédité), utilisez ., comme d'habitude:
find . -name '*bat*'
Pour rechercher l'ensemble de votre ordinateur, utilisez/ . Pour rechercher votre répertoire personnel, utilisez ~ou le nom complet de votre répertoire personnel. ( Le shell se développe~ sur le chemin d'accès complet de votre répertoire personnel.)
Si vous souhaitez effectuer une recherche sans tenir compte de la casse, afin que les fichiers contenant BAT, bAtet ainsi de suite soient mis en correspondance, utilisez le -inametest au lieu du -nametest:
find /path/to/folder -iname '*bat*'
J'ai remarqué que tous vos fichiers se terminent .c. Si vous souhaitez uniquement rechercher des fichiers comme celui-ci, utilisez:
find /path/to/folder -name '*bat*.c'
J'ai remarqué que tous vos noms de fichiers se trouvent batau tout début ou à la fin de la partie précédant le .csuffixe. Si vous voulez éviter de faire correspondre des fichiers comme embattled.c, vous pouvez utiliser:
find /path/to/folder -name '*bat.c' -o -name 'bat*.c'
-oest l' opérateur or .
Pour rechercher uniquement des fichiers normaux - et non des dossiers, des liens symboliques et des nœuds de périphérique spéciaux - vous pouvez utiliser -type f. Ceci est fréquemment recommandé et parfois tout à fait approprié ... mais souvent pas ce que vous voulez vraiment , surtout si vous exécutez finddans le but d'examiner la sortie vous-même. Si vous aviez un lien symbolique correspondant à votre recherche, ne voudriez-vous pas le savoir?
Si vous souhaitez trouver à la fois des fichiers normaux et des liens symboliques, vous pouvez utiliser:
find /path/to/folder -name '*bat*' \( -type f -o -type l \)
Qui utilise le -o opérateur et également des parenthèses pour le regroupement (qui doit être cité pour que le shell ne les traite pas spécialement; sinon vous obtiendrez une erreur de syntaxe).
Mais supposons que vous ne souhaitiez voir que des liens symboliques qui pointent finalement vers un fichier normal (et non des liens symboliques vers des répertoires, des nœuds de périphérique, etc.). C'est en fait encore plus simple: utilisez -xtypeplutôt que -type. Pourvu que vous n'êtes pas en cours d' exécution findavec le -Ldrapeau, -xtypesur un lien symbolique teste le type du fichier les points de lien vers.
find /path/to/folder -name '*bat*' -xtype f
Si vous avez un lien symbolique vers un autre lien symbolique vers un fichier, -xtype fil correspondra même si sa cible directe est un autre lien symbolique plutôt qu'un fichier normal. C'est presque toujours ce que vous voulez.
Souvent, les gens pensent qu'ils veulent -type f, mais vraiment ils le veulent -xtype f.
findl'action par défaut si vous n'en spécifiez pas une -print. Toutes les commandes données ci-dessus sont équivalentes à elles-mêmes avec-print à la fin.
findest souvent utilisé pour exécuter des commandes basées sur les fichiers trouvés - souvent, des commandes qui apportent des modifications. Mais il existe également d'autres actions dont le but est d'afficher les résultats -print. Un intérêt particulier est -ls:
find /path/to/folder -name '*bat*' -ls
Cela donne des informations détaillées sur chaque fichier, dans un format multi-colonnes, similaire (mais pas tout à fait le même que) ce que vous verriez en exécutant .ls file
Pour plus d'informations sur findet d'autres façons de rechercher des fichiers, voir:
findpage de manuel , accessible en ligne ou en s'exécutant man finddans un terminal.find, locateet les xargsservices publics.-xtypeconseils; peut ls *bat*- être et -maxdepth/ mindepthméritent également d'être mentionnés.
ls déjà couvert , je me suis concentré sur le cas récursif findici. Bien sûr, une réponse détaillée couvrant la liste non (ou moins) récursive des noms de fichiers correspondant à un modèle ( lset findavec -maxdepth) serait également utile. Vous voudrez peut-être publier une telle réponse!
La façon la plus simple est de courir
locate bat
De cette façon, vous pouvez rechercher dans tout l'ordinateur des fichiers contenant "bat" dans le nom du fichier
Pour actualiser la liste des fichiers sur votre PC, exécutez
updatedb
Exécutez cette commande lorsque vous avez récemment ajouté de nouveaux fichiers à votre compte
updatetdb
updatedbexécution manuelle ou automatique de la dernière fois ), sudo updatedbil faudrait d'abord l'exécuter, oui.
bat.
find /lors de locaterecherches dans une base de données, tout en findrépertoriant récursivement /puis en faisant correspondre l'expression régulière.
Ouvrez le terminal et modifiez les répertoires dans le répertoire à partir duquel vous souhaitez commencer la recherche, puis exécutez cette commande:
find . -name "*bat*" -type f
La .commence la commande find du répertoire courant.
Le -namecorrespond à la chaîne batet est sensible à la casse. ( -inameEst sensible à la casse)
Les -type frecherches pour les fichiers.
Si les fichiers se trouvent dans le répertoire courant, utilisez:
$ ls *bat*
batgirl.c batman.c batwoman.c cricketbat.c
Ou (pour les avoir ligne par ligne):
$ ls -1 *bat*
batgirl.c
batman.c
batwoman.c
cricketbat.c
Si vous souhaitez rechercher les fichiers dans le système, utilisez:
$ find / -name "*bat*"
/path/to/cricketbat.c
/path/to/batgirl.c
/path/to/batwoman.c
/path/to/batman.c
Vous souhaitez utiliser la findcommande, avec l' -inameoption de correspondance de nom de fichier insensible à la casse, ou l' -nameoption de correspondance de nom de fichier sensible à la casse. Ces deux options vous permettront d'utiliser des noms génériques. Donc, pour trouver les noms de fichiers contenant "bat", vous devez utiliser:
find / -iname '*bat*'
Ou
find / -name '*bat*'
Le *signifie "n'importe quel caractère (s)", donc la recherche recherche batavec tous les caractères, y compris aucun, avant ou après. Les /recherches à partir du répertoire racine de manière récursive, vous pouvez utiliser celle .qui recherchera récursivement à partir du répertoire actuel, ou le chemin absolu d'où vous souhaitez rechercher. Jetez un oeil à la façon dont la recherche de fichiers à l'aide de regex dans le script shell linux
-type f, qui fait plus que simplement exclure les répertoires et n'est souvent pas ce que les utilisateurs veulent vraiment .
Utilisez le bon vieux find.
find <path_for_search> -type f -iname "*bat*"
par exemple.:
% find . -type f -iname "*bat*"
./batgirl.c
./batwoman.c
./cricketbat.c
./batman.c
de man find:
-type c
File is of type c:
[..]
d directory
[..]
f regular file
[..]
-iname pattern
Like -name, but the match is case insensitive.