3 votes

Erreur "les chemins doivent précéder l'expression" lorsqu'on essaie de trouver tous les fichiers jpg dans le répertoire actuel

Tout en exécutant la commande find pour trouver tous les fichiers jpg dans le répertoire actuel comme

find . -maxdepth 1 -type f -name *.jpg

J'obtiens l'erreur suivante :

 find: paths must precede expression: pic1 (1).jpg
 Usage: find [-H] [-L] [-P] [-Olevel] [-Dhelp|tree|search|stat|rates|opt|exec] [path...] [expression]

Je ne suis pas en mesure de comprendre ce qui ne va pas avec cela.

10voto

l0b0 Points 7560

tl;dr Toujours citer les globs dans find : find . -maxdepth 1 -type f -name "*.jpg" (remarquez le " caractères entourant * ).

Dans votre cas, le Shell interprète *.jpg (notez le * ) et en essayant de faire correspondre les noms de fichiers dans le répertoire actuel qui se terminent par le caractère .jpg . Il existe un fichier nommé pic1 (1).jpg de sorte que le nom du fichier remplace *.jpg . La commande du système est donnée par le Shell devient

find . -maxdepth 1 -type f -name 'pic1 (1).jpg'

Pour voir en profondeur, essayez de tracer la commande originale en utilisant strace . Ce qui est réellement exécuté est :

touch foo.jpg bar.jpg
strace find . -maxdepth 1 -type f -name *.jpg 2>&1 | grep jpg
execve("/usr/bin/find", ["find", ".", "-maxdepth", "1", "-type", "f", "-name", "bar.jpg", "foo.jpg"], [/* 62 vars */]) = 0
...

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