Pourquoi «trouver» n'affiche-t-il pas ce fichier?

21

En utilisant findavec grep, on peut localiser les fichiers qui correspondent à un modèle:

# find | grep error
./solr-modifiedSolr4/SolrPhpClient/phpdocs/errors.html
./error_log
./includes/classes/error_log

Cependant, en utilisant findseul le premier fichier est introuvable:

# find . -name error*
./error_log
./includes/classes/error_log

Pourquoi ne trouve-t-il pas findle errors.htmlfichier lorsqu'il n'est pas utilisé avec grep? Comment est également findutilisé pour afficher ce fichier?

dotancohen
la source

Réponses:

42

Vous devez citer votre argument error*car le shell le développe. Donc, ce que vous exécutez actuellement find -name error_log, c'est parce que c'est ce que le shell peut développer (il y a un fichier nommé error_logdans votre répertoire actuel).

find . -name 'error*'

Est l'invocation correcte pour votre cas d'utilisation.

Dennis Kaarsemaker
la source
12
une écriture alternative est find -name error\*- une touche de moins à appuyer;) cela a le même effet, le *passe comme un astérisque alphabétisé à la commande find et n'est pas développé par votre shell
zhenech
3
Lorsque vous rencontrez des problèmes avec le shell (comment il interprète votre ligne de commande et transmet tous les arguments et paramètres à la commande réelle), réexécutez la commande en lui ajoutant la echocommande. Donc, si vous echo find . -name error*find . -name error_log
couriez,