Communication tubes

Résolu
lilboyz -  
 lilboyz -
Bonjour à toutes / tous,

J'aimerai connaître votre avis sur ce petit problème :

J'aimerai faire une recherche de fichiers réguliers et connaître le nombre de fichiers trouvés, en utilisant la communication par tube, et les commandes find, cat et wc.
En ne prenant pas en compte les erreurs éventuellement générées par find et en stockant le résultat final dans res.txt

J'ai essayé quelques solutions, mais avec les redirections tel quel cela le shell me renvoyait une erreur de redirection ambigüe, alors j'ai ajouté des parenthèses :

( find /usr -name "*" -type f >& /dev/null ) | cat | (wc -l > res.txt)
mais j'ai 0 dans res.txt.
Par contre, si je retire les parenthèses et que je n'effectue pas la redirection sortie erreur pour find, j'ai 20500 qui sort et qui est la réponse.

Quelqu'un voit d'où provient l'ambiguïté? D'avance merci.

3 réponses

  1. lilboyz
     
    Ca vient clairement de la redirection de la sortie erreur standard, puique quand je tape :
    find /usr -name "*" -type f -print | cat | (wc -l > res.txt)
    J'ai le bon nombre qui est écrit dans res.txt

    Une idée? =s
    0
  2. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    Salut,

    Ben c'est normal, ">& /dev/null" redirige à la fois la sortie standard et la sortie d'erreur vers le néant, donc forcément rien n'est affiché ;-\

    find /usr -name "*" -type f 2>/dev/null | wc -l >res.txt
    0
  3. lilboyz
     
    Il m'affiche un message d'erreur quand j'écris :
    (find /usr -name "*" -type f -exec cat {} \; 2> /dev/null ) | (wc -l > res.txt)

    "Les chemins doivent précéder l'expression : 2
    Utilisation : find ...."

    J'utilise le cat dans find à présent grâce au paramètre -exec.
    0
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      J'utilise le cat dans find à présent grâce au paramètre -exec.
      Mais on s'en fiche du cat !!! C'est le nombre de fichers que tu veux, pas le nombre de lignes ;-\

      T'as essayé la commande que je t'ai donnée ?
      0
    2. lilboyz
       
      Oui j'ai essayé :
      > find /usr -name "*" -type f 2>/dev/null

      et j'ai un message d'erreur à cause du "2"
      > Les chemins doivent précéder l'expression : 2
      Utilisation : find ....

      Je ne comprends pas.
      0
    3. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Quel système ? Ou distrib ?
      Quel shell ?
      Quelle version de find ?

      Chez moi (GNU/Linux Mandriva 2010.2 - GNU bash, version 4.1.5(2)- find (GNU findutils) 4.5.8) la commande passe bien :

      $ find /usr -name "*" -type f 2>/dev/null | wc -l
      238725
      0
    4. lilboyz
       
      GNU/Linux Ubuntu 10.04.4
      find GNU 4.4.2
      tcsh 6.17.00 2009-07-10
      0
    5. lilboyz
       
      Il me retourne "Ambiguous output redirect."
      0