[gelöst] bash: Variablennutzung in {}

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
detix
Beiträge: 1743
Registriert: 07.02.2007 18:51:28
Wohnort: MK

[gelöst] bash: Variablennutzung in {}

Beitrag von detix » 06.02.2011 10:44:41

In einem Unterverzeichnis möchte ich zB 2 Ordner mit rsync sichern,
das geht ja einfach mit:

Code: Alles auswählen

rsync -aR /home/detix/tmp/./{Ordner1,Ordner2} /home/detix/tmp/_00/1
Wie kann ich aber den Ausdruck in der geschweiften Klammer durch eine Variable ersetzen?
Nur einer von zig Fehlversuchen:

Code: Alles auswählen

x="Ordner1,Ordner2"
rsync -aR /home/detix/tmp/./{$x} /home/detix/tmp/_00/1

rsync: link_stat "/home/detix/tmp/{Ordner1,Ordner2}" failed: No such file or directory (2)
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1060) [sender=3.0.7]
Die Ordner sind vorhanden, aber irgendwas wird falsch interpretiert!
Nur was und wie schreib ichs richtig, wenn es denn überhaupt so möglich ist?
Zuletzt geändert von detix am 06.02.2011 16:00:58, insgesamt 1-mal geändert.
Gruß an alle Debianer, und immer daran denken:
Macht ohne Haftung funktioniert nicht!

Benutzeravatar
feltel
Webmaster
Beiträge: 10458
Registriert: 20.12.2001 13:08:23
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Leipzig, Germany
Kontaktdaten:

Re: bash: Variablennutzung in {}

Beitrag von feltel » 06.02.2011 12:12:14

wie wärs hiermit:

Code: Alles auswählen

for i in verzeichnis1 verzeichnis2 verzeichnis3; do
  rsync -aR /home/detix/tmp/$1 /home/detix/tmp2/$i
done
Wie heitßt der schöne Spruch: viele Wege führen nach Rom. :-)

Benutzeravatar
Six
Beiträge: 8069
Registriert: 21.12.2001 13:39:28
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Siegburg

Re: bash: Variablennutzung in {}

Beitrag von Six » 06.02.2011 12:13:25

Hehe, das ist auch mein Workaround. Leider ist es echt knifflig, regexs per Variable durchzureichen.
Be seeing you!

Benutzeravatar
detix
Beiträge: 1743
Registriert: 07.02.2007 18:51:28
Wohnort: MK

Re: bash: Variablennutzung in {}

Beitrag von detix » 06.02.2011 14:21:35

Da ich den Ausdruck 3x in meinem Skript brauche, scheint mir eine for...next Schleife nicht so geeignet zu sein.
Hab mir eine grafische Fortschrittsanzeige gebastelt (kdialog) und da wird dieser Ausdruck halt 3x gebraucht:

1. für rsync selbst
2. für das Errechnen der Gesamtgröße der zu sichernden Dateien/Ordner (du)
3. für das Errechnen des aktuellen Kopierfortschritts in Prozent (du)

Schön wäre es natürlich diesen Ausdruck als Variable am Anfang des Skripts festzulegen,
um nicht bei kleinen Änderungen alles durchsuchen zu müssen und jeweils 3x anzupassen.
Die Problematik ist übrigens bei du völlig gleich.
Gruß an alle Debianer, und immer daran denken:
Macht ohne Haftung funktioniert nicht!

Benutzeravatar
Six
Beiträge: 8069
Registriert: 21.12.2001 13:39:28
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Siegburg

Re: bash: Variablennutzung in {}

Beitrag von Six » 06.02.2011 14:51:27

Achso, es geht garnicht um die regex. Dann benutze einfach

Code: Alles auswählen

VAR="foo bar"
du $VAR
rsync /path/$VAR /otherpath/
Das könnte mit rsync so nicht ganz funktionieren und vielleicht müsstest du da dann doch eine Schleife bauen. Die sähe dann so aus:

Code: Alles auswählen

for i in $VAR
do
    rsync /path/$i /otherpath/
done
Alternativ baue eine Schleife und mache den Mist darin:

Code: Alles auswählen

for i in $VAR
do
   du $i
   rsync $i
   du $i
done
Das ist nach O-Notation billiger ;)
Be seeing you!

Benutzeravatar
detix
Beiträge: 1743
Registriert: 07.02.2007 18:51:28
Wohnort: MK

Re: bash: Variablennutzung in {}

Beitrag von detix » 06.02.2011 15:59:23

Ich glaubs ja nicht, es funktioniert..., was hab ich nicht alles probiert!

Entscheidend scheint zu sein, das man vorher in das zu sichernde Verzeichnis wechselt,
sonst geht es definitiv nicht!
In meinem Fall also:

Code: Alles auswählen

x="Ordner1 Ordner2"
cd /home/detix/tmp
du -kc $x
rsync -aR $x /home/detix/tmp/_00/1
cd /home/detix/tmp/_00/1
du -kc $x
Ich war so fixiert auf {}, das alle anderen Möglichkeiten vergessen waren!
Falls es doch jemand mit einer Variablensetzung hinbekommt, nur her damit.

Vielen Dank euch beiden, für die leichten verbalen Schläge auf den Hinterkopf :D
Edit: kleine Korrektur der Befehle
Zuletzt geändert von detix am 07.02.2011 08:10:59, insgesamt 1-mal geändert.
Gruß an alle Debianer, und immer daran denken:
Macht ohne Haftung funktioniert nicht!

Benutzeravatar
Six
Beiträge: 8069
Registriert: 21.12.2001 13:39:28
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Siegburg

Re: [gelöst] bash: Variablennutzung in {}

Beitrag von Six » 06.02.2011 17:54:51

Schläge bekommt man hier immer günstig ;)
Be seeing you!

Antworten