Forum Linux.débutant utilisation combinée de tee (resolu)

Posté par  . Licence CC By‑SA.
Étiquettes : aucune
0
22
août
2020

Bonjour et merci pour ce rappel de cette commande très utile mais malgré tout un peu oubliée.
Je poste aujourd'hui car j'ai des difficultés à l'utiliser dans un rsync.
Mon objectif :
Je souhaite effectuer un rsync en affichant sur la console, mais je souhaite aussi consigner tous les fichiers disparus dans un fichier log sans avoir toutes les lignes de progression dans ce fichier.
voici ma commande rsync :
rsync -r --info=progress2 /dossier_source/* /poolzfs-1/dossier_dest

Je tente de la compléter avec un
| grep 'file has vanished:' | tee /error.log
mais je perd l'état de la progression sur la console (logique).

J'espère que ma problématique est claire.

Je vous remercie pour votre aide.

  • # Utiliser les options de rsync

    Posté par  . Évalué à 2. Dernière modification le 23 août 2020 à 09:03.

    Tu peux utiliser l'option --log-file=FILE, en contrôlant son format avec --log-file-format=FORMAT (cf. man rsync).
    C'est probablement le plus simple pour faire ce que tu veux.

    • [^] # Re: Utiliser les options de rsync

      Posté par  . Évalué à 1.

      Merci pour cette option qui pourrait effectivement me permettre d'arriver à mes fins, mais par contre je ne comprend pas la syntaxe du FORMAT par défaut (%i %n%L).
      Ou puis-je trouver plus d'explications ?

      • [^] # Re: Utiliser les options de rsync

        Posté par  . Évalué à 1.

        man rsyncd.conf, section log format.

        • [^] # Re: Utiliser les options de rsync

          Posté par  . Évalué à 1.

          Super, merci.
          Par contre ce que je souhaite faire c'est consigner uniquement les erreurs dans mon fichier error or je ne trouve aucun paramètre concernant les erreurs.
          Pour info un : rsync… 2> error.log n'affiche plus rien sur la console.
          Bref je tourne rond depuis un bout de temps sans trouver de bonnes solutions.

          • [^] # Re: Utiliser les options de rsync

            Posté par  . Évalué à 1.

            Si ta version de rsync était assez récente, ça serait le cas par défaut.
            Là, il faut probablement que tu mettes --no-msgs2stderr : c'est dans man rsync tout ça…

            • [^] # Re: Utiliser les options de rsync

              Posté par  . Évalué à 1.

              Désolé pour le man, mais je n'en ai par sur OS (freeBSD - Xigmanas) et si je consulte https://linux.die.net/man/1/rsync ou https://linux.die.net/man/5/rsyncd.conf cette option n'apparait pas. par contre trouvé ici

              • [^] # Re: Utiliser les options de rsync

                Posté par  . Évalué à 1.

                Il faudrait que tu aies la documentation de ta version de rsync sous un format ou un autre, mais en gros :
                - soit tu arrives à lui faire dissocier les flux d'erreurs et d'infos en interne, et après c'est facile ;
                - soit tu ne peux pas, et alors il faut le faire à la main comme proposé par wismerhill ci-dessous, en galérant plus ou moins selon ce que te permet de faire ton shell (et selon les [versions des] commandes dont tu disposes pour manipuler les flux…)

  • # Grep après le branchement

    Posté par  . Évalué à 3.

    Tee te fait un "branchement" de son entrée vers sa sortie standard et un (ou plusieurs) fichiers.
    Si tu veux garder le contenu complet sur la sortie et seulement un sous-ensemble dans le fichier de log, il faut filtrer uniquement dans la branche en question.
    Cela peut se faire avec la substitution de processus (je sais que ça fonctionne avec bash, si tu utilise un autre shell, il faut vérifier):

    rsync … | tee >(grep 'file has vanished:' > error.log)
    
    • [^] # Re: Grep après le branchement

      Posté par  . Évalué à 1.

      Merci pour cette réponse, c'est bien une syntaxe de ce genre que je recherche.
      Malheureusement la réponse est Missing name for redirect.

      • [^] # Re: Grep après le branchement

        Posté par  . Évalué à 2.

        La réponse de quoi?
        De tee ou grep?
        Quelle commande as-tu exécute?
        Attention qu'il n'y a pas d'espace entre le ">" et la "("

        • [^] # Re: Grep après le branchement

          Posté par  . Évalué à 1. Dernière modification le 23 août 2020 à 12:11.

          j'ai tapé exactement ta syntaxe en respectant les espaces.
          d'après mes faibles connaissances ;) le grep ne semble pas poser de PB, mais plus le TEE

          voici ma ligne de commande :
          rsync -r --info=progress2 /dlink/francois/* /poolzfs-1/francois | tee >(grep 'file has vanished:' > error.log)

        • [^] # Re: Grep après le branchement

          Posté par  . Évalué à 1.

          Nota : lorsque que je fais un UP pour retrouver la commande précédente, voici ce que je trouve :

          rsync -r --info=progress2 /dlink/francois/* /poolzfs-1/francois | tee > ( grep 'file has vanished:' > error.log )

          bash corrige en mettant des espaces partout

          • [^] # Re: Grep après le branchement

            Posté par  . Évalué à 2.

            Bash ne corrige rien (ou alors tu as une configuration bizarre de readline), as-tu tapé manuellement (avec tes doigts sur le clavier) cette commande, ou tu as fait un copier/coller sans vérifier?

            • [^] # Re: Grep après le branchement

              Posté par  . Évalué à 1. Dernière modification le 23 août 2020 à 16:41.

              j'ai entièrement tapé la commande complète et je viens de verifier à nouveau et même comportement.
              Chose que je n'ai pas précisé : je suis sous freeBSD.
              Mais je ne pense pas que la syntaxe de cette commande soit différente d'un OS à l'autre dans la mesure ou rsync est commun à toutes les distributions.
              Edit : bien que le PB ne se situe pas sur rsync.

              • [^] # Re: Grep après le branchement

                Posté par  . Évalué à 3.

                je suis sous freeBSD.

                Dans ce cas, quel shell utilise-tu?
                Vérifie sa documentation pour voir s'il supporte la substitution de processus.

            • [^] # Re: Grep après le branchement

              Posté par  . Évalué à 1.

              Au besoin je vais tenter l'opération à partir d'une machine tier sous debian.

            • [^] # Re: Grep après le branchement

              Posté par  . Évalué à 2.

              Ok cela fonctionne correctement à partir de debian.
              Je vais donc continuer à partir de cette machine.
              J'aurais aimé comprendre comment faire sous freebsd, mais j'ai au moins une solution fonctionnelle.
              Merci beaucoup pour votre patience.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.