[find] Bug ??

Fermé
tlep Messages postés 596 Date d'inscription jeudi 21 février 2002 Statut Membre Dernière intervention 25 octobre 2012 - 16 juil. 2007 à 11:44
asevere Messages postés 13084 Date d'inscription lundi 28 janvier 2002 Statut Webmaster Dernière intervention 23 novembre 2024 - 19 juil. 2007 à 12:05
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
A voir également:

8 réponses

tlep Messages postés 596 Date d'inscription jeudi 21 février 2002 Statut Membre Dernière intervention 25 octobre 2012 118
16 juil. 2007 à 11:49
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]

:-((
0
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 622
16 juil. 2007 à 13:19
Est-ce que le répertoire ou est exécutée la commande contient des fichiers .txt ?
0
tlep Messages postés 596 Date d'inscription jeudi 21 février 2002 Statut Membre Dernière intervention 25 octobre 2012 118
16 juil. 2007 à 13:47
Non, il n'en contient pas, mais il ne contient pas non plus de fichiers csv !
0
asevere Messages postés 13084 Date d'inscription lundi 28 janvier 2002 Statut Webmaster Dernière intervention 23 novembre 2024 426
16 juil. 2007 à 14:26
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
@+

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 622
16 juil. 2007 à 14:36
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
0
tlep Messages postés 596 Date d'inscription jeudi 21 février 2002 Statut Membre Dernière intervention 25 octobre 2012 118
16 juil. 2007 à 15:25
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 ??
0
asevere Messages postés 13084 Date d'inscription lundi 28 janvier 2002 Statut Webmaster Dernière intervention 23 novembre 2024 426
16 juil. 2007 à 15:34
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?) ?

@+
0
asevere Messages postés 13084 Date d'inscription lundi 28 janvier 2002 Statut Webmaster Dernière intervention 23 novembre 2024 426
16 juil. 2007 à 15:43
PS: le 268 c'est le nombre de block utilisés (en admettant que la taille d'un block soit de 1Ko)

++
0
tlep Messages postés 596 Date d'inscription jeudi 21 février 2002 Statut Membre Dernière intervention 25 octobre 2012 118
16 juil. 2007 à 17:22
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" ?
0
asevere Messages postés 13084 Date d'inscription lundi 28 janvier 2002 Statut Webmaster Dernière intervention 23 novembre 2024 426
16 juil. 2007 à 19:19
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 :-)
0
tlep Messages postés 596 Date d'inscription jeudi 21 février 2002 Statut Membre Dernière intervention 25 octobre 2012 118
16 juil. 2007 à 20:54
Je ne comprends pas: "l'expansion est faite dans le répertoire d'où est lancé le find"

Tu as compris le souci ??
0
asevere Messages postés 13084 Date d'inscription lundi 28 janvier 2002 Statut Webmaster Dernière intervention 23 novembre 2024 426
16 juil. 2007 à 21:26
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 ?
0
tlep Messages postés 596 Date d'inscription jeudi 21 février 2002 Statut Membre Dernière intervention 25 octobre 2012 118
17 juil. 2007 à 10:06
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 ?
0
asevere Messages postés 13084 Date d'inscription lundi 28 janvier 2002 Statut Webmaster Dernière intervention 23 novembre 2024 426 > tlep Messages postés 596 Date d'inscription jeudi 21 février 2002 Statut Membre Dernière intervention 25 octobre 2012
19 juil. 2007 à 12:05
Pour le moment à Paris / La Défense dans une grosse SSII...
0