Dites 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 à l’aide de searchtag bat
?
bat
AnywherePour trouver tous les fichiers n'importe où dans /path/to/folder
dont les noms contiennent bat
name__, vous pouvez utiliser:
find /path/to/folder -name '*bat*'
J'ai entre guillemets le modèle de recherche *bat*
car, si les guillemets ont été omis et que les fichiers correspondent à *bat*
dans le répertoire en cours, le shell va développer *bat*
dans une liste et transmettre to find
name__. Alors, find
ne fonctionnerait pas correctement. (\*bat\*
et "*bat*"
fonctionnent également.)
Pour effectuer une recherche dans le dossier dans lequel vous vous trouvez (par exemple, cd
name__ed), utilisez .
, comme d'habitude:
find . -name '*bat*'
Pour effectuer une recherche dans l’ensemble de votre ordinateur, tilisez /
. Pour rechercher votre répertoire de base, utilisez ~
ou le nom complet de votre répertoire de base. ( Le shell étend ~
au chemin complet de votre répertoire personnel.)
Si vous souhaitez effectuer une recherche sans distinction de casse, afin que les fichiers contenant BAT
name__, bAt
et ainsi de suite correspondent, utilisez le test -iname
à la place du test -name
:
find /path/to/folder -iname '*bat*'
J'ai remarqué que tous vos fichiers se terminent par .c
. Si vous voulez seulement trouver des fichiers comme ça, utilisez:
find /path/to/folder -name '*bat*.c'
J'ai remarqué que tous vos noms de fichier ont bat
soit au tout début, soit à la fin de la partie précédant le suffixe .c
. Si vous souhaitez éviter de faire correspondre les fichiers tels que embattled.c
, vous pouvez utiliser:
find /path/to/folder -name '*bat.c' -o -name 'bat*.c'
-o
est l'opérateur ou .
Pour rechercher uniquement 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 souvent recommandé et parfois tout à fait approprié ... mais n'est souvent pas ce que vous voulez vraiment , surtout si vous exécutez find
dans le but d'examiner la sortie toi-même. Si vous aviez n lien symbolique correspondant à votre recherche, ne voudriez-vous pas en savoir plus?
Si vous voulez trouver à la fois des fichiers normaux et des liens symboliques, vous pouvez utiliser:
find /path/to/folder -name '*bat*' \( -type f -o -type l \)
Cela utilise l'opérateur -o
ainsi que des parenthèses pour le regroupement (ce qui doit être indiqué de manière à ce que le shell ne les traite pas spécialement, sinon vous obtiendrez une erreur de syntaxe).
Mais supposons que vous souhaitiez uniquement voir des liens symboliques qui pointent vers un fichier normal (et non des liens symboliques vers des répertoires, des nœuds de périphérique, etc.). En fait, c'est encore plus simple: utilisez -xtype
au lieu de -type
. Si vous n'exécutez pas find
avec -L
flag, -xtype
sur un lien symbolique teste le type du fichier vers lequel le lien pointe.
find /path/to/folder -name '*bat*' -xtype f
Si vous avez un lien symbolique vers un autre lien symbolique vers un fichier, -xtype f
lui correspondra même si sa cible directe est un autre lien symbolique plutôt qu'un fichier normal. C'est presque toujours ce que tu veux.
Souvent, les gens pensent qu'ils veulent -type f
, mais ils veulent vraiment -xtype f
.
L'action par défaut de find
name __ si vous n'en spécifiez pas est -print
. Toutes les commandes données ci-dessus sont équivalentes à elles-mêmes, avec -print
ajouté à la fin.
find
est souvent utilisé pour exécuter des commandes en fonction des fichiers trouvés, souvent des commandes qui apportent des modifications. Mais il existe également d'autres actions ayant pour but d'afficher les résultats, outre -print
. -ls
:
find /path/to/folder -name '*bat*' -ls
Cela donne des informations détaillées sur chaque fichier, dans un format multi-colonnes, similaire à ce que vous verriez si vous exécutiez ls file
(quoique pas tout à fait pareil).
Pour plus d'informations sur find
et d'autres moyens de rechercher des fichiers, voir:
find
name__ , accessible en ligne ou en exécutant man find
dans un terminal.find
name__, locate
et xargs
name__.Le plus simple est de courir
locate bat
De cette façon, vous pouvez rechercher dans l’ensemble de 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.
Ouvrez le terminal et changez de répertoire en répertoire à partir duquel vous souhaitez lancer la recherche, puis exécutez la commande suivante:
find . -name "*bat*" -type f
.
lance la commande de recherche à partir du répertoire en cours.
Le -name
correspond à la chaîne bat
et est sensible à la casse. (-iname
est insensible à la casse)
Le -type f
recherche uniquement les fichiers.
Si les fichiers sont dans le répertoire en cours, 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 ces 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 commande find
, avec l'option -iname
pour la correspondance de noms de fichier ne respectant pas la casse, ou l'option -name
pour les correspondances de noms de fichiers sensibles à la casse. Ces deux vous permettront d'utiliser des noms génériques. Donc, pour trouver les noms de fichiers contenant "bat", utilisez:
find / -iname '*bat*'
Ou
find / -name '*bat*'
*
signifie "tout caractère (s)", la recherche recherche donc bat
avec tous les caractères, y compris aucun, avant ou après. Le /
effectue une recherche récursive à partir du répertoire racine. Vous pouvez utiliser .
qui effectuera une recherche récursive dans le répertoire actuel ou le chemin absolu vers lequel vous souhaitez effectuer la recherche. Jetez un oeil à comment rechercher des fichiers en utilisant regex dans un script shell linux
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.