[find] Bug ??

tlep Messages postés 597 Statut Membre -  
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
Configuration: Windows XP
Firefox 2.0.0.4

8 réponses

  1. tlep Messages postés 597 Statut Membre 118
     
    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
  2. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    Est-ce que le répertoire ou est exécutée la commande contient des fichiers .txt ?
    0
  3. tlep Messages postés 597 Statut Membre 118
     
    Non, il n'en contient pas, mais il ne contient pas non plus de fichiers csv !
    0
  4. asevere Messages postés 13095 Date d'inscription   Statut Webmaster Dernière intervention   426
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    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
  7. tlep Messages postés 597 Statut Membre 118
     
    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
    1. asevere Messages postés 13095 Date d'inscription   Statut Webmaster Dernière intervention   426
       
      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
    2. asevere Messages postés 13095 Date d'inscription   Statut Webmaster Dernière intervention   426
       
      PS: le 268 c'est le nombre de block utilisés (en admettant que la taille d'un block soit de 1Ko)

      ++
      0
    3. tlep Messages postés 597 Statut Membre 118
       
      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
  8. asevere Messages postés 13095 Date d'inscription   Statut Webmaster Dernière intervention   426
     
    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
  9. tlep Messages postés 597 Statut Membre 118
     
    Je ne comprends pas: "l'expansion est faite dans le répertoire d'où est lancé le find"

    Tu as compris le souci ??
    0
    1. asevere Messages postés 13095 Date d'inscription   Statut Webmaster Dernière intervention   426
       
      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
    2. tlep Messages postés 597 Statut Membre 118
       
      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
      1. asevere Messages postés 13095 Date d'inscription   Statut Webmaster Dernière intervention   426 > tlep Messages postés 597 Statut Membre
         
        Pour le moment à Paris / La Défense dans une grosse SSII...
        0