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 lister tous ces fichiers en utilisant l'étiquette de recherche (searchtag) ? 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 lister tous ces fichiers en utilisant l'étiquette de recherche (searchtag) ? bat
?
bat
N'importe oùPour trouver tous les fichiers n'importe où à l'intérieur de /path/to/folder
dont le nom contient bat
vous pouvez utiliser :
find /path/to/folder -name '*bat*'
J'ai cité le modèle de recherche *bat*
car, si les guillemets ont été omis et que les fichiers correspondent à *bat*
dans le répertoire actuel, le Shell se développera *bat*
en une liste d'entre eux et transmet que a find
. Ensuite find
ne fonctionnerait pas correctement. ( \*bat\*
y "*bat*"
également fonctionner).
Pour effectuer une recherche dans le dossier dans lequel vous vous trouvez actuellement (par exemple, le dossier dans lequel vous vous êtes rendu), vous pouvez utiliser la fonction "recherche". cd
), utiliser .
comme d'habitude :
find . -name '*bat*'
Pour effectuer une recherche sur l'ensemble de l'ordinateur, utiliser /
. Pour effectuer une recherche dans votre répertoire personnel, utilisez ~
ou le nom complet de votre répertoire personnel. ( Le Shell se développe ~
au chemin d'accès complet de votre répertoire personnel).
Si vous souhaitez effectuer une recherche insensible à la casse, alors les fichiers contenant des BAT
, bAt
et ainsi de suite sont appariés, utilisez la fonction -iname
au lieu du test -name
test :
find /path/to/folder -iname '*bat*'
J'ai remarqué que tous vos fichiers se terminent par .c
. Si vous ne voulez trouver que des fichiers de ce type, utilisez :
find /path/to/folder -name '*bat*.c'
J'ai remarqué que tous vos noms de fichiers ont bat
soit au tout début, soit à la toute fin de la partie précédant le .c
suffixe. Si vous voulez éviter de faire correspondre des fichiers comme embattled.c
vous pourriez utiliser :
find /path/to/folder -name '*bat.c' -o -name 'bat*.c'
-o
est le ou de l'opérateur.
Pour trouver uniquement fichiers réguliers --et non les dossiers, les liens symboliques et les nœuds de périphériques spéciaux, vous pouvez utiliser la fonction -type f
. Cela est souvent recommandé et parfois tout à fait approprié... mais souvent pas ce que vous voulez vraiment surtout si vous êtes en cours d'exécution find
dans le but d'examiner le résultat vous-même. Si vous aviez un lien symbolique qui correspond à votre recherche, ne voudriez-vous pas en être informé ?
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 \)
Il utilise le -o
ainsi que des parenthèses pour le regroupement (qui doivent être citées pour que le Shell ne les traite pas de manière spéciale, sinon vous obtiendrez une erreur de syntaxe).
Mais supposons que vous ne vouliez voir que les liens symboliques qui pointent finalement vers un fichier normal (et non les liens symboliques vers des répertoires, des nœuds de périphériques, etc.) C'est encore plus simple : utilisez -xtype
代わりに -type
. A condition de ne pas courir find
avec -L
drapeau, -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
le fera correspondre même si son direct La cible 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 en réalité, ils veulent -xtype f
.
find
Si vous n'en spécifiez pas, l'action par défaut est -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, en plus de -print
. Un intérêt particulier est porté à -ls
:
find /path/to/folder -name '*bat*' -ls
Cela donne des informations détaillées sur chaque fichier, dans un format à plusieurs colonnes, similaire (mais pas tout à fait identique) à ce que vous verriez en exécutant la commande ls _file_
.
Pour plus d'informations sur find
et d'autres moyens de trouver des fichiers, voir :
find
page du manuel accessible en ligne ou par téléphone man find
dans un terminal.find
, locate
et xargs
des services publics.La méthode la plus simple consiste à exécuter
locate bat
Vous pouvez ainsi rechercher dans l'ensemble de l'ordinateur les fichiers dont le nom contient "bat".
Pour actualiser la liste des fichiers sur votre PC, exécutez la commande suivante
updatedb
Exécutez cette commande lorsque vous avez récemment ajouté de nouveaux fichiers à votre compte
Ouvrez le terminal et changez de répertoire jusqu'à celui à partir duquel vous voulez commencer la recherche, puis exécutez cette commande :
find . -name "*bat*" -type f
En .
lance la commande find à partir du répertoire actuel.
Le -name
correspond à la chaîne bat
et est sensible à la casse. ( -iname
est insensible à la casse)
Le -type f
recherche uniquement des fichiers.
Si les fichiers se trouvent dans le répertoire actuel, utiliser :
$ 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
Utiliser le bon vieux find
.
find <path_for_search> -type f -iname "*bat*"
eg :
% 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.
SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.