5 votes

(Ubuntu/Linux) La commande "find" donne des résultats différents en fonction des guillemets.

J'utilisais

find -iname *prib*

et n'obtenais qu'un seul résultat "./prib09jack.pdf" avec

find -iname "*prib*" 

Je reçois beaucoup plus de résultats que je ne recherchais comme

./Dir1/PRIB09/prib09jackTFF1.pdf

et beaucoup d'autres, mais pourquoi importait-il que les guillemets soient autour de "prib" ?

Meilleures salutations.

10voto

dequin Points 113

Si un fichier (ou des fichiers) correspondant à *prib* existe dans le répertoire actuel lorsque la commande find est exécutée, le shell va étendre le joker pour faire correspondre d'abord le(s) nom(s) de fichier avant de transmettre les arguments à find, ce qui entraîne l'exécution d'une commande différente de celle attendue par l'utilisateur.

Par exemple,

$ ls foo*
foobar

$ find -iname foo*
./foobar

$ find -iname "foo*"
./foobar
./dir/foobz
./dir2/fooblat

En résumé, les guillemets retardent l'interprétation des jokers pour que la commande find les exécute. L'absence de guillemets étend immédiatement les jokers.

1voto

landon9720 Points 11241

Le problème est que votre shell étend les jokers * avant de les transmettre à find. Vous voulez que find les obtienne, donc vous devez les échapper. Les guillemets font cela, ou vous pourriez faire

find -iname \*iprib\*

et cela fonctionnerait aussi. L'élément clé est que vous voulez que les jokers parviennent à find sans être interprétés par quoi que ce soit d'autre en cours de route (comme votre shell).

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