[find] Bug ??
tlep
Messages postés
597
Statut
Membre
-
asevere Messages postés 13095 Date d'inscription Statut Webmaster Dernière intervention -
asevere Messages postés 13095 Date d'inscription Statut Webmaster Dernière intervention -
Bonjour,
J'ai des bugs bizarres avec la commande find :
Exemple :
find /home/outils/log -name *.txt
find: paths must precede expression
Usage: find [path...] [expression]
Par contre :
find /home/outils/log -name *.csv
ca marche !
J'ai pas mal de cas bizarres comme celui-ci, aussi bien sur une debian que sur une redhat !
Si vous avez des suggestions je suis preneur !
Thierry
J'ai des bugs bizarres avec la commande find :
Exemple :
find /home/outils/log -name *.txt
find: paths must precede expression
Usage: find [path...] [expression]
Par contre :
find /home/outils/log -name *.csv
ca marche !
J'ai pas mal de cas bizarres comme celui-ci, aussi bien sur une debian que sur une redhat !
Si vous avez des suggestions je suis preneur !
Thierry
Configuration: Windows XP Firefox 2.0.0.4
8 réponses
-
J'ajoute que si je mets des guillemets, çà marche:
find /home/outils/log -name "*.txt"
Mais dans un script ca ne marche plus :
for i in `find /home/outils/log -name "*.txt"`;do
echo $i
done
-> find: paths must precede expression
Usage: find [path...] [expression]
:-(( -
Est-ce que le répertoire ou est exécutée la commande contient des fichiers .txt ?
-
Non, il n'en contient pas, mais il ne contient pas non plus de fichiers csv !
-
Bonjour,
Il ne contient pas non plus de fichiers cachés ?
L'idéal, serait que tu nous donne le resultat complete des commandes suivantes (par copier/coller):$ ls -alR /home/outils/log $ find /home/outils/log -name *.txt $ find /home/outils/log -name *.csv
@+
-
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
Pour ne pas interprétée par le shell l'étoile du find DOIT être protégée:
find -name \*.txt ...
find -name "*.txt" ...
find - name '*.txt' ...
un alias peut-être ?
\find /home/outils/log -name \*.txt
quel find ?
whereis find -
ls -alR /home/outils/log
/home/outils/log:
total 268
drwxrwx--- 2 outils www-data 16384 2007-07-16 10:11 .
drwxr-xr-x 5 outils outils 4096 2007-07-16 12:05 ..
-rw-rw-rw- 1 outils outils 250 2007-07-09 09:20 Log_REJEU_DISE_09072007.log
-rw-rw-rw- 1 outils outils 250 2007-07-10 09:20 Log_REJEU_DISE_10072007.log
-rw-rw-rw- 1 outils outils 186104 2007-07-11 10:37 Log_REJEU_DISE_11072007.log
-rw-rw-rw- 1 outils outils 547 2007-07-12 10:48 Log_REJEU_DISE_12072007.log
-rw-rw-rw- 1 outils outils 250 2007-07-13 09:20 Log_REJEU_DISE_13072007.log
-rw-rw-rw- 1 outils outils 250 2007-07-14 09:20 Log_REJEU_DISE_14072007.log
-rw-rw-rw- 1 outils outils 250 2007-07-15 09:20 Log_REJEU_DISE_15072007.log
-rw-rw-rw- 1 outils outils 250 2007-07-16 09:20 Log_REJEU_DISE_16072007.log
-rw-rw-rw- 1 outils outils 268 2007-07-09 09:20 Log_REJEU_DISE_BZH_09072007.log
-rw-rw-rw- 1 outils outils 268 2007-07-10 09:20 Log_REJEU_DISE_BZH_10072007.log
-rw-rw-rw- 1 outils outils 1914 2007-07-11 10:37 Log_REJEU_DISE_BZH_11072007.log
-rw-rw-rw- 1 outils outils 583 2007-07-12 10:48 Log_REJEU_DISE_BZH_12072007.log
-rw-rw-rw- 1 outils outils 268 2007-07-13 09:20 Log_REJEU_DISE_BZH_13072007.log
-rw-rw-rw- 1 outils outils 268 2007-07-14 09:20 Log_REJEU_DISE_BZH_14072007.log
-rw-rw-rw- 1 outils outils 268 2007-07-15 09:20 Log_REJEU_DISE_BZH_15072007.log
-rw-rw-rw- 1 outils outils 268 2007-07-16 09:20 Log_REJEU_DISE_BZH_16072007.log
(Pourquoi 268 ???)
find /home/outils/log -name *.txt
find: paths must precede expression
Usage: find [path...] [expression]
find /home/outils/log -name *.csv
-> RIEN
Si je fais un touch /home/outils/log/test.txt puis
find /home/outils/log -name *.txt
find: paths must precede expression
Usage: find [path...] [expression]
Par contre:
find /home/outils/log -name \*.txt
/home/outils/log/test.txt
Je ne vois pas pourquoi il faut échapper * pour txt ??-
Bonche y'a un mystere là :)
En fait, quand tu fais find [...] -name *.txt , si le repertoire contient des fichiers a.txt b.txt, l'expansion fait que ton find est en fait find [...] -name a.txt b.txt , c'est exactement le même fonctionnement qu'un ls *txt.
Par contre, là, comme il n'y a pas de fichier *.txt ou .*.txt il y a un soucis :(
Dans le doute, quer te donne la commande shopt, et quel interpreteur utilises tu (bash?) ?
@+ -
-
shopt
cdable_vars off
cdspell off
checkhash off
checkwinsize on
cmdhist on
dotglob off
execfail off
expand_aliases on
extglob off
histreedit off
histappend off
histverify off
hostcomplete on
huponexit off
interactive_comments on
lithist off
login_shell on
mailwarn off
no_empty_cmd_completion off
nocaseglob off
nullglob off
progcomp on
promptvars on
restricted_shell off
shift_verbose off
sourcepath on
xpg_echo off
C'est bizarre, j'ai le meme souci sur une redhat (sur un autre motif de fichier et sur un autre répertoire)
C'est encore plus bizarre que l'échappement devant * fonctionne: il ne devrait pas trouver avec
find /home/ -name "\*.csv" ?
-
-
Bingo! :)
Je suis sous mac, donc je n'ai pas le même message exactement, mais le problème est le même, comme quoi 1 heure de métro, ça permet de réfléchir...PBG4:~ adrien$ mkdir -p test4tlep/home/outils/log PBG4:~ adrien$ cd test4tlep/ PBG4:~/test4tlep adrien$ touch a.txt b.txt PBG4:~/test4tlep adrien$ for i in a b c d e f g h; do > touch home/outils/log/$i.log > done PBG4:~/test4tlep adrien$ find home/outils/log/ -name *.txt find: b.txt: unknown expression primary PBG4:~/test4tlep adrien$
En gros, l'expansion est (très logiquement) faite dans le répertoire d'où est lancé le find :-) -
Je ne comprends pas: "l'expansion est faite dans le répertoire d'où est lancé le find"
Tu as compris le souci ??-
Oui, j'ai compris (en tout cas, je le reproduit).
Si je reprend l'exemple que j'ai donné au dessus#Création de l'arborescence de test PBG4:~ adrien$ mkdir -p test4tlep/home/outils/log PBG4:~ adrien$ cd test4tlep/ #Création dans le répertoire courant des fichier a.txt et b.txt PBG4:~/test4tlep adrien$ touch a.txt b.txt #Création des fichiers de log dans le répertoire cible de la commande find à jouer PBG4:~/test4tlep adrien$ for i in a b c d e f g h; do > touch home/outils/log/$i.log > done #Commande find a partir du repertoire test4tlep PBG4:~/test4tlep adrien$ find home/outils/log/ -name *.txt find: b.txt: unknown expression primary #dans le repertoire test4tlep *.txt devient "a.txt b.txt" d'où l'erreur, c'est troublant parcequ'on demande a find de chercher dans un autre répertoire (home/outils/log/) mais il est tout a fait logique que l'expansion soit faite a partir du répertoire courant comme dans ls *.txt PBG4:~/test4tlep adrien$
En gros, dans mon exemple, taper la commande find home/outils/log/ -name *.txt dans le répertoire test4tlep revient a taper la commande find . -name a.txt b.txt dans le répertoire test4tlep/home/outils/log/
Sinon, comment va ?
Toujours à Nantes ? -
On approche de l'explication.
En fait il y a 3 comptes root sur la machine:
root /root
root2 /home/root2
root3 /home/root3
(Tous les 3 ont UID=0)
Je m'aperçois que, quelque soit l'utilisateur (root, root2, root3), le find plante avec le motif "*.txt" dès qu'il est exécuté dans le répertoire /home/root2:
su root
cd /home/root2
find /home/outils/log -name *.txt
find: paths must precede expression
Usage: find [path...] [expression]
cd ..
find /home/outils/log -name *.txt
/home/outils/log/test.txt
C dingue hein ? :-))
-Ben non chuis a Redon en télétravail; et toi à toujours à Nantes ?
-