4 votes

Utilisation de Linux grep ou find

Comment trouver un fichier sur mon disque dur qui commence par io_file ?

J'ai essayé :

grep -r io_file*` 

et

find -name io_file*

find n'a rien donné alors que grep semble prendre des siècles sans aucun résultat.

Qu'est-ce que je fais de mal ?

1 votes

Grep et find ne sont pas destinés à la même chose.

1 votes

(pas le même Tom que l'affiche)

0 votes

Avec tout le respect que je dois à la véritable magie de la recherche montrée dans les autres réponses, une alternative est d'installer ack . Il s'agit d'un outil Perl dont l'interface est plus simple et qui englobe les principales fonctionnalités de find et grep.

11voto

John Millikin Points 501

find / -name 'io_file*'

Le premier paramètre indique où la recherche doit commencer. / signifie votre disque dur entier. Pour rechercher uniquement dans le répertoire courant (et les sous-répertoires), utilisez : find .

La chaîne de recherche doit être citée si elle contient un métacaractère Shell, tel qu'un astérisque. Sinon, elle sera analysée par le Shell et ne sera jamais vue par l'utilisateur. find .

1 votes

Ce n'est pas tout à fait vrai. La chaîne de recherche sera seulement étendue s'il y a une correspondance sinon, il n'est pas élargi. Essayez "echo thisisnotafile*", par exemple.

1 votes

Jesper : est-ce un comportement dépendant de Shell ? Le terminal à partir duquel je travaille utilise tcsh, et la citation fait une différence même pour les noms de fichiers qui ne sont pas extensibles.

0 votes

Merci pour cela. Et comment puis-je dire que je veux regarder dans le répertoire actuel ainsi que dans tous les sous-répertoires ?

7voto

Tom Points 373
find / -name 'io_file*' -type f 2>/dev/null

   /: Start looking from root directory

   -type f: Only search for regular files

    2>/dev/null: Redirect errors to /dev/null. (handy if you are not root and
                 not interested in all the "access denied" messages)

Gardez à l'esprit que grep et find font des choses différentes.

grep recherche dans les FICHIERS d'entrée nommés (ou l'entrée standard si aucun fichier n'est nommé, ou si le nom du fichier - est donné) pour les lignes contenant une correspondance à l'adresse PATTERN donné. Par défaut, grep affiche les lignes correspondantes.

trouver - recherche de fichiers dans un répertoire hiérarchie

0 votes

-name motif N'oubliez pas de mettre le motif entre guillemets afin de le protéger de l'expansion par le Shell.

0 votes

C'est à partir de la page de manuel find

0 votes

@jcolebrand nope

4voto

gz. Points 1979

À mon avis, l'utilisation de find est lente pour une recherche sur l'ensemble du disque dur (il vous montrera également beaucoup d'erreurs de permission lorsque vous accédez à des fichiers que vous ne possédez pas). Si possible, utilisez locate :

locate -b 'io_file*'

Vous devrez probablement réindexer si le fichier est plus récent que 24 heures (normalement, cela déclenche un cronjob quotidien) :

sudo updatedb

2voto

Jonas Points 1764
find / -name 'io_file*'

2voto

La commande

# set -x

imprimera les commandes après l'expansion Shell pour que vous puissiez voir ce qui se passe.

# find . -name letter.*
+ find . -name letter.rtf

...et maintenant vous pouvez voir que le Shell développe l'argument du nom en letter.rtf car mon répertoire actuel contient un fichier appelé letter.rtf qui correspond au modèle.

Citer le motif (les guillemets doubles fonctionnent aussi dans ce cas) arrêtera l'expansion de Shell.

# find . -name 'letter.*'
+ find . -name 'letter.*'

Pour le désactiver, utilisez

# set +x

Vous pouvez également utiliser -x sur un ligne shebang pour voir ce que font les Shell Shell, ce qui peut grandement aider au débogage.

#!/bin/bash -x

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