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

Résolu
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

  1. 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.
    1. 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 ?
      1. Modérateur
        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
        1. Je viens de tester, et ça marche parfaitement bien ! C'est exactement ce que je cherchais. Je te remercie !
          1. Modérateur
            De rien, bonne continuation !