Forum Programmation.shell Automatisation de l'envoi de mail

Posté par  . Licence CC By‑SA.
1
1
déc.
2016

Bonjour,

je me trouve confronté à un problème que je n'arrive pas à résoudre.

Voici le contexte :
Sur un Mageia 5 j'ai mis en place un serveur alcasar.
Ce serveur me créer une archive chiffrées toute les semaines, dans ce répertoire : /var/Save/archive

J'arrive à m'envoyer manuellement les archives par mail ( fichiers .gpg).
Mais ce que je voudrais faire c'est automatiser cette tâche et indiquer dans mon script que le fichier qui doit être utilisé ( en tant que pièce jointe )doit être le dernier fichier créé dans ce répertoire.

En ce moment j'ai ça dans mon fichier .sh
`
echo "texte de mon mail" | mail -s "sujet du mail" -a /var/Save/archive/*.gpg adressemaildestinataire

Donc avec cette commande je reçois mon premier fichier .gpg de créé dans le répertoire /var/Save/archive/
J'ai bien tenté de faire un : /var/Save/archive | grep .gpg$ | head -1 (cette commande dans le prompt me sort bien le dernier fichier créé dans le repertoire )
Mais j'arrive pas à créer une variable ou quelque chose de ce style pour préciser que ça doit être le résultat de cette requête qui doit être en pièce jointe.

J'espère avoir été clair !!

Merci à vous

  • # trop vague

    Posté par  (site Web personnel) . Évalué à 2.

    quel critère ?

    la date la plus récente ?

    dans ce cas find avec la bonne option devrait t'aider

    Système - Réseau - Sécurité Open Source

  • # Ma proposition

    Posté par  . Évalué à 2.

    monfichier=$(ls --group-directories-first -tr -1 --file-type /var/Save/archive/*.gpg | tail -1)
    echo $monfichier
    • [^] # Re: Ma proposition

      Posté par  . Évalué à 2.

      plus court

      monfichier=$(ls -lt /var/Save/archive/*.gpg | head -1)

      qui va te donner les infos longues du dernier fichier

      ou sinon
      find /var/Save/archive -type f -iname '*.gpg' -mtime -1
      pour trouver un fichier *.gpg modifié il y a moins de 24h

      • [^] # Re: Ma proposition

        Posté par  . Évalué à 2.

        Je trouve deux défauts à tes propositions :
        - le premier est que dans ta première proposition, la variable va être polluée par tous les attributs du fichiers (taille, propriétaire…).
        - dans ton second cas, tu ne renvoies pas du tout le dernier fichier, mais une liste de fichiers datant de moins de 24h. On commence à s'éloigner un peu trop du cahier des charges.

        Mais en combinant tout ca, on pourrait faire ceci :

        monfichier=$(ls -1t /var/Save/archive/*.gpg | head -1)

        Les options que j'avais mis pour distinguer les répertoires des fichiers ne sont pas vraiment utiles si on utilise *.gpg.
        A noter la différence subtile où j'ai remplacé dans les options, ta lettre l (L) par le chiffre 1 (un), pour n'avoir que le chemin et nom de fichier dans la variable.

        • [^] # Re: Ma proposition

          Posté par  . Évalué à 2.

          bien joué,
          en effet les polices de caracteres sont trompeuses

          et j'avais lu chez toi -tr -l et je ne comprenais pas non plus comment tu virais les infos des droits et propriétaire/taille.

          mais si c'est un -1 (le chiffre UN) alors en effet ca change tout.

  • # Résolu !

    Posté par  . Évalué à 1. Dernière modification le 03/12/16 à 00:05.

    Merci pour vos réponses. je viens de les voir que maintenant je pensais recevoir une alerte sur ma boîte. J'ai trouvé un solution à mon problème :

    Je me suis créé ce bash :

    /etc/postfix/script/mail.sh

    il comprend ces lignes :

    #!/bin/bash
    piece=$(ls –t /var/Save/archive | head -1)
    cd /var/Save/archive/
    echo “le texte dans le mail” | mail –s “sujet du mail” –a “$piece” email_du_destinataire

    j'ai fait quelques tests et tout semble ok.

    Si vous voyez des erreurs hésitez pas !
    C'est en effet pour avoir le dernière fichier ( par date ) créé dans ce répertoire.

    Merci de votre participation

    • [^] # Re: Résolu !

      Posté par  . Évalué à 2.

      une optmisisation banale

      tu utilises 2 fois le chemin /var/Save/archive

      alors soit tu le met dans une variable en debut de script,
      soit tu rentres dans le dossier puis tu fais le ls -t...

      donc soit

      cd /var/Save/archive
      piece=$(ls -t | head -1) # puisque tu es deja dans le dossier
      mail ...

      soit

      chemin=/var/Save/archive
      piece=$(ls -t $chemin | head -1)
      cd $chemin
      mail ...
  • # résolu

    Posté par  . Évalué à 1.

    Je viens de tester comme vous dites et ça ne passe pas.. Allez comprendre. j'ai remis le bash comme indiqué et ça marche.

Suivre le flux des commentaires

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