[Linux] rsync funktioniert auf Komandozeile aber nicht bash Script

OP #7422577
Lesenswert?
• ▲
▼

Ich habe hier ein doofes Problem:

ich archiviere meine Systemdaten mit Rsync um das System im Fehlerfall wieder herzustellen. Dies funktioniert auch tadellos. Aktuelle fahre ich dieses Backup immer so:

1
rsync -a --progress / --exclude={"/boot/*","/swap.img","/BU/*","/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/storage/*","/storage4TB/*","/lost+found"} /storage4TB/back

manuell direkt über die Komandozeile.

Wenn ich dies jedoch in ein Bashcript einfüge, dann nimmt er die excludezeile nicht mit. und kopiert alles, was ja durch die swap file und die proc/kcore natürlich überhaupt nicht geht, auch würde er Dateien kopieren (z.b. boot) welche nach einem neu aufgesetzten Rechner nicht zurück darf.

Wie kann ich dies in ein Bash Script einfügen damit er auch die excludes übernimmt?! (Dies ist natürlich nur ein Einzeiler, wird hier im Forum aber hinter exclude gekippt)

Script ganz simpel:

1
#!/bin/sh
2

3
rsync -a --progress / --exclude={"/boot/*","/swap.img","/BU/*","/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/storage/*","/storage4TB/*","/lost+found"} /storage4TB/back

BS: Debian 11 (Bullseye) - Kernel 5.15.107-2 Rsync: 3.2.3 protocol version 31

Moderator Persönliche Seite #7424057
Lesenswert?
• ▲
▼

Der Unterschied wird klar, wenn man den Einzeiler einmal mit "echo" davor in der Kommandozeile jeweils in der bash und in der dash ausgeben lässt - hier gekürzt zwecks besserer Übersichtlichkeit:

1
$ echo rsync -a --progress / --exclude={"/boot/*","/swap.img"} /storage4TB/back                                                                                                                 rsync -a --progress / --exclude=/boot/* --exclude=/swap.img /storage4TB/back
2
$ dash
3
$ echo rsync -a --progress / --exclude={"/boot/*","/swap.img"} /storage4TB/back
4
rsync -a --progress / --exclude={/boot/*,/swap.img} /storage4TB/back

Die bash bröselt den Ausdruck {...} in mehrere Ausdrücke auf und übergibt jedes Teil davon extra mittels "--exclude=XXX" an rsync. Die dash kann das nicht.

(Man könnte das Script auch portabel schreiben, aber egal.)

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.