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

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
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 431
 
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
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
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 431
 
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
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
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 431
 
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
lilboyz
 
GNU/Linux Ubuntu 10.04.4
find GNU 4.4.2
tcsh 6.17.00 2009-07-10
0
lilboyz
 
Il me retourne "Ambiguous output redirect."
0