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.