Création d’un fichier concaténé sous Unix, puis envoi de ce fichier à tous dans le même script

J’essaie de créer un script qui concaténera tous les fichiers out.* Dans le répertoire /home/rfranklin/stackDump/ , puis transmettra ce fichier concaténé à une commande mailx – pour que je puisse me l’envoyer

J’ai jusqu’ici essayé deux méthodes et aucune ne semble fonctionner. En espérant que quelqu’un puisse me dire pourquoi!

Jusqu’à présent, dans le /home/rfranklin/stackDump/ , j’ai les fichiers:

 out.file1 out.file2 out.file3 out.file4 otherfile.txt otherfile2.txt 

Tout d’abord j’ai essayé d’écrire une boucle for:

 #!/bin/bash # OUT_FILES_DIRECTORY="/home/rfranklin/stackDump/out.*" for file in $OUT_FILES_DIRECTORY do cat $file > stack_dump_`date +%Y%m%d` | mailx -s stack_dump_`date +%Y%m%d` [email protected] done 

Ceci renvoie:

 Null message body; hope that's ok Null message body; hope that's ok Null message body; hope that's ok Null message body; hope that's ok 

Et je reçois 4 emails vierges. MAIS le fichier concaténé est créé pour que je sache que quelque chose fonctionne.

Ensuite, j’ai essayé d’utiliser un document ici:

 #!/bin/bash # bash < stack_dump_`date +%Y%m%d` | mailx -s stack_dump_`date +%Y%m%d` [email protected] done EOF 

Cela ne marche pas non plus pour moi. Où est-ce que je me trompe!

Merci

Je ne vois pas l’intérêt de créer un fichier ici, vous pourriez tout aussi facilement mailx la sortie de cat vers mailx

 cat /home/rfranklin/stackDump/out.* | mailx -s "stack_dump_$(date +%Y%m%d)" [email protected] 

Si vous préférez une pièce jointe au contenu du corps du courrier

 cat /home/rfranklin/stackDump/out.* | uuencode "stack_dump_$(date +%Y%m%d)" | mailx -s "stack_dump_$(date +%Y%m%d)" [email protected] 

Vous pouvez utiliser le tee pour cela:

 #!/bin/bash d=$(date +%Y%m%d) for file in /home/rfranklin/stackDump/out.* do cat "$file" | tee -a "stack_dump_$d" | mailx -s "stack_dump_$d" [email protected] done 

tee copie l’entrée standard dans un fichier, ainsi que dans la sortie standard. L’option -a ajoute au fichier plutôt que de l’écraser.

Dans votre version originale du script, le > redirigeait la sortie de cat vers le fichier, ce qui signifiait que le canal vers mailx était vide.

Je suppose que votre script ne fonctionne pas plus d’un jour, j’ai donc déplacé les appels à l’extérieur de la boucle.

D’après ce que j’ai compris, vous souhaitez concaténer tous les fichiers d’un répertoire donné dans un seul fichier, puis vous l’envoyer par courrier. Corrige moi si je me trompe.

Donc, d’abord concaténer tous les fichiers en un seul:

  cat /home/rfranklin/stackDump/out.* > concatFile 

Puis envoyez-le vous-même:

 dat=$(date +%Y%m%d) mail -s "stack_dump_$dat" [email protected] < concatFile 

modifier

Vous pouvez le mettre dans un script:

 dir=$1 cat $dir/out.* > concatFile dat=$(date +%Y%m%d) mail -s "stack_dump_$dat" [email protected] < concatFile 

lancez-le comme tel:

 ./script /home/rfranklin/stackDump 

Le concatFile sera créé dans votre répertoire actuel.