51 votes

pour trouver des fichiers en ne recherchant qu'une partie de leur nom ?

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 ?

74voto

Eliah Kagan Points 111731

Recherche de fichiers avec 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).

Élargir ou restreindre votre recherche en fonction du nom

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.

Fichiers compatibles uniquement

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 .

Obtenir des résultats détaillés

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 en savoir plus

Pour plus d'informations sur find et d'autres moyens de trouver des fichiers, voir :

17voto

Mark Kirby Points 17611

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

15voto

karel Points 97032

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.

6voto

chaos Points 25386

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

2voto

A.B. Points 84870

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.

SistemesEz.com

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.

Powered by:

X