[pipe] Réutiliser le résultat d'une commande

Résolu/Fermé
charline159 Messages postés 208 Date d'inscription lundi 14 août 2017 Statut Membre Dernière intervention 22 juin 2022 - 29 mars 2021 à 22:08
mamiemando Messages postés 33077 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 18 avril 2024 - 1 avril 2021 à 11:49
Bonjour, je me demandais s'il était possible de réutiliser le résultat d'une commande avec le pipe et sans passer par un script.

Par exemple, si je veux cherche un fichier et que je veux afficher son contenu, est-il possible de faire quelque chose dans le genre?
file . -name file | cat quelquechose


Sinon j'avais pensé à passer par des fichiers pour stocker les résultats intermédiaires, comme ceci:
find . -name file >> result && cat result | cut -c 3- >> result2 && cat < result2
etc.

Est-ce une mauvaise idée / mauvaise pratique, et y-a-t-il plus simple ?

4 réponses

dachiasse Messages postés 1709 Date d'inscription samedi 12 septembre 2020 Statut Membre Dernière intervention 13 mai 2021 148
30 mars 2021 à 02:25
Salut,

La commande est
find
et non
file
je crois.

La seconde commande est compliquée, rien qu'à lire.

Et la première est inutile. Parce que tu vas chercher un fichier. Soit il est présent, tu l'envoies en lecture par
cat
. Soit il est absent et tu devrais avoir une erreur de retour de
cat
(je n'ai pas testé).

En revanche, si tu fais directement :
cat file
ça t'évite d'écrire la commande de recherche.
0
charline159 Messages postés 208 Date d'inscription lundi 14 août 2017 Statut Membre Dernière intervention 22 juin 2022 1
30 mars 2021 à 10:35
Salut, oui effectivement il y a une faute de frappe, c'est bien
find
que je voulais utiliser. Merci à toi.

Je cherchais une manière de simplifier tout ça justement, pour éviter d'avoir à le faire en 2 fois comme ceci:
file . -name file

puis
cat file

car en une fois c'est plus simple, afin de pouvoir aller plus vite et d'automatiser certaines tâches. Mais le fait de tout grouper en 1 fois, je ne sais pas si c'est quelque chose qui se fait habituellement ?
0
mamiemando Messages postés 33077 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 18 avril 2024 7 748
Modifié le 30 mars 2021 à 12:48
Bonjour,

Imaginons que le dossier
~/toto
contienne trois fichiers nimmés
fichier1.txt
,
fichier2.txt
et
fichier3.txt
, contenant respectivement le texte
coucou1
,
coucou2
et
coucou3
:

(mando@silk) (~/toto) $ find . -type f
./fichier3.txt
./fichier1.txt
./fichier2.txt


(mando@silk) (~/toto) $ head fichier*txt
==> fichier1.txt <==
coucou1

==> fichier2.txt <==
coucou2

==> fichier3.txt <==
coucou3


Dans ce cas :
  • Si tu veux passer simultanément en paramètre à une commande (disons
    cat
    ), i.e. exécuter la commande
    cat fichier1.txt fichier2.txt fichier3.txt
    , tu peux utiliser
    xargs
    qui remet sur une ligne d'arguments les lignes générées sur la sortie standard par la commandes précédant le
    |
    :


(mando@silk) (~/toto) $ find . -type f | xargs cat
coucou3
coucou1
coucou2
  • Si tu veux itérativement appliquer une commande à chacun de ces fichiers (disons
    echo
    ), tu peux injecter le résultat de ta commande dans une boucle
    for
    :


(mando@silk) (~/toto) $ for x in $(find -type f); do echo $x; done
./fichier3.txt
./fichier1.txt
./fichier2.txt


Cependant attention ! Des précautions doivent être prises si les arguments, ici tes noms de fichiers, contiennent des espaces. Pour plus de détails voir cette discussion.

Bonne chance
0
charline159 Messages postés 208 Date d'inscription lundi 14 août 2017 Statut Membre Dernière intervention 22 juin 2022 1
30 mars 2021 à 19:03
Je viens de tester, et ça marche parfaitement bien ! C'est exactement ce que je cherchais. Je te remercie !
0
mamiemando Messages postés 33077 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 18 avril 2024 7 748
1 avril 2021 à 11:49
De rien, bonne continuation !
0