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

Résolu
charline159 Messages postés 216 Statut Membre -  
mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   -
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. dachiasse Messages postés 1932 Statut Membre 153
     
    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
  2. charline159 Messages postés 216 Statut Membre 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 ?
    0
  3. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 943
     
    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
  4. charline159 Messages postés 216 Statut Membre 1
     
    Je viens de tester, et ça marche parfaitement bien ! C'est exactement ce que je cherchais. Je te remercie !
    0
    1. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 943
       
      De rien, bonne continuation !
      0