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:
bat
n'importe oùPour trouver tous les fichiers n'importe où à l'intérieur /path/to/folder
dont 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
, bAt
et ainsi de suite soient mis en correspondance, utilisez le -iname
test au lieu du -name
test:
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 bat
au tout début ou à la fin de la partie précédant le .c
suffixe. 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'
-o
est 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 find
dans 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 -xtype
plutôt que -type
. Pourvu que vous n'êtes pas en cours d' exécution find
avec le -L
drapeau, -xtype
sur 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 f
il 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
.
find
l'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.
find
est 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 find
et d'autres façons de rechercher des fichiers, voir:
find
page de manuel , accessible en ligne ou en s'exécutant man find
dans un terminal.find
, locate
et les xargs
services publics.-xtype
conseils; peut ls *bat*
- être et -maxdepth
/ mindepth
méritent également d'être mentionnés.
ls
déjà couvert , je me suis concentré sur le cas récursif find
ici. 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 ( ls
et find
avec -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
updatedb
exécution manuelle ou automatique de la dernière fois ), sudo updatedb
il faudrait d'abord l'exécuter, oui.
bat
.
find /
lors de locate
recherches dans une base de données, tout en find
ré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 -name
correspond à la chaîne bat
et est sensible à la casse. ( -iname
Est sensible à la casse)
Les -type f
recherches 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 find
commande, avec l' -iname
option de correspondance de nom de fichier insensible à la casse, ou l' -name
option 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 bat
avec 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.