2016-08-31 6 views
0

Unten ist ein Ausschnitt aus einem WordPress-Backup Bash-Skript über cron ausgeführt.Senden Sie E-Mail mit Dateianhängen als Bash-Array

do 
    file="$MDB/$db.$now.sql.gz" 
    mysqldump -u $USER -h $HOST -p$PASS $db | gzip -9 > $file 
    echo "Backup $file.....DONE" 
    echo "Database Backup of $file" | mutt -a "$file" -s "Database Backup File Attached" -- [email protected] 
    echo "Emailing $file.... DONE" 
done 

Beachten Sie in der E-Mail die Backups Teil. Die Dateien werden einzeln per E-Mail versandt, daher werden bei 10 Datenbanksicherungen 10 E-Mails gesendet.

Ich möchte die Dateien in einem Array in der for-Schleife sammeln, dann über mutt, senden Sie eine einzige E-Mail mit allen Dateien als Anhang.

Wie kann es in Bash getan werden?

+0

Ihre Schleife fehlt die erste Zeile, wahrscheinlich mit 'while'. Vermutlich setzt es den Wert von 'MDB',' db' und/oder 'now', so dass' Datei' jedes Mal einen anderen Wert durch die Schleife hat. – chepner

Antwort

2

Fügen Sie einfach den Wert file zu einem Array innerhalb der Schleife hinzu.

declare -a files 
... 
do 
    file="$MDB/$db.$now.sql.gz" 
    mysqldump -u "$USER" -h "$HOST" -p"$PASS" "$db" | gzip -9 > "$file" 
    files+=("$file") 
done 

echo "Backup ${files[*]}.....DONE" 
echo "Database Backup" | mutt -s "Database Backup Files Attached" -a "${files[@]}" -- [email protected] 
echo "Emailing ${files[*]}.... DONE" 

Ein paar Anmerkungen:

  1. ${files[*]} verwenden, wenn die Liste in einen String enthält; Verwenden Sie ${files[@]}, wenn jedes Element ein separates Argument sein sollte.
  2. Mit mehreren Argumenten muss -a die letzte Option vor -- sein.
  3. Sie möchten wahrscheinlich nicht jeden Backup-Namen in den Betreff aufnehmen.
Verwandte Themen