Communication tubes

Résolu/Fermé
lilboyz - Modifié par lilboyz le 28/03/2012 à 15:11
 lilboyz - 28 mars 2012 à 16:53
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

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 dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 417
28 mars 2012 à 15:27
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
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 dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 417
28 mars 2012 à 15:43
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
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 dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 417
28 mars 2012 à 15:54
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
GNU/Linux Ubuntu 10.04.4
find GNU 4.4.2
tcsh 6.17.00 2009-07-10
0
Il me retourne "Ambiguous output redirect."
0