ubuntuusers.de

Pfad mit Space im Dateinamen in einer Variable?

Status: Gelöst | Ubuntu-Version: Ubuntu 20.04 (Focal Fossa)
Antworten |

rarity

Avatar von rarity

Anmeldungsdatum:
19. Februar 2007

Beiträge: 133

Wohnort: Wien

Hallo!

Ich verwende borgbackup mit dem Script dass im Ubuntuusers Wiki zur Verfügung gestellt wird. Ich wollte die Virtual Box Dateien vom Backup ausschließen. Leider hat der Ordner ein Leerzeichen im Namen (/home/rarity/VirtualBox VMs/) Wie kann ich den Pfad in der Variable angeben?

Folgendes funktioniert leider nicht:

1
2
3
4
5
6
7
8
# Hier eine Liste mit den zu sichernden Verzeichnissen angeben
# z.B. sicherung="/home/peter/Bilder /home/peter/Videos --exclude *.tmp"
sicherung="
/etc/   
/home/  
--exclude /home/altesicherung/
--exclude /home/thomas/VirtualBox VMs/
"

Ich habe schon folgendes ausprobiert:

1
2
3
--exclude /home/rarity/VirtualBox\ VMs/
--exclude "/home/rarity/VirtualBox VMs/"
--exclude '/home/rarity/VirtualBox VMs/'

Leider hat nichts funktioniert.

Danke!

Gruß rarity

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17621

Wohnort: Berlin

rarity schrieb:

Hallo!

Ich verwende borgbackup mit dem Script dass im Ubuntuusers Wiki zur Verfügung gestellt wird. Ich wollte die Virtual Box Dateien vom Backup ausschließen. Leider hat der Ordner ein Leerzeichen im Namen (/home/rarity/VirtualBox VMs/) Wie kann ich den Pfad in der Variable angeben?

Folgendes funktioniert leider nicht:

1
2
3
4
5
6
7
8
# Hier eine Liste mit den zu sichernden Verzeichnissen angeben
# z.B. sicherung="/home/peter/Bilder /home/peter/Videos --exclude *.tmp"
sicherung="
/etc/   
/home/  
--exclude /home/altesicherung/
--exclude /home/thomas/VirtualBox VMs/
"

Ich habe schon folgendes ausprobiert:

1
2
3
--exclude /home/rarity/VirtualBox\ VMs/
--exclude "/home/rarity/VirtualBox VMs/"
--exclude '/home/rarity/VirtualBox VMs/'

Leider hat nichts funktioniert.

Müsste es nicht

1
2
3
4

--exclude "/home/thomas/VirtualBox VMs/"
# statt 
--exclude "/home/rarity/VirtualBox VMs/"

heißen?

Backslash vor Blank sollte auch gehen, und ist bei nur einem Blank keine schlechte Lösung. Single-Quotes alias Apostrophe müssten auch funktionieren, eben alles mit thomas statt rarity, aber sind übertrieben.

Borgbackup kenne ich zwar nicht, aber wenn das Shellsyntax verwendet, wäre es so.

Sollte das alles nicht klappen wären noch Jokerzeichen zu testen:

1
--exclude /home/rarity/VirtualBo*

da Du ja wahrscheinlich keinen Ordner "/Virtual Bossa Nova" hast, der dann unabsichtlich mit excluded würde.

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13207

rarity schrieb:

Ich habe schon folgendes ausprobiert:

1
2
3
--exclude /home/rarity/VirtualBox\ VMs/
--exclude "/home/rarity/VirtualBox VMs/"
--exclude '/home/rarity/VirtualBox VMs/'

Alle Varianten vom Quoting sind OK - wenn sie außerhalb von doppelten Quotes stehen! Dein erster Blockquote lässt den Schluss zu, dass das ggf. nicht der Fall ist.

Leider hat nichts funktioniert.

Es hängt davon ab, wie Du die Pfade angibst. Dafür müsste man die komplette Kommandozeile oder das komplette Skript haben. Die Ausgabe von borg help patterns ist auch sehr ausführlich und hilfreich. Da steht sogar, wie Du das ausprobierst ohne ein Backup anzulegen.

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11260

Wohnort: München

Wenn der Inhalt des Strings als Parameterliste für einen Befehl genutzt werden soll, würde ich auf einen Array zurückgreifen (funktioniert so z.B. in der Bash), damit macht man sich das Leben erheblich leichter, weil man dann nicht auf ein Escaping im String angewiesen ist, der von der Shell am IFS aufgesplittet werden muss:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
#!/usr/bin/bash
backup_cmd="borg"

backup_arguments=(
/etc/   
/home/  
--exclude /home/altesicherung/
--exclude "/home/thomas/VirtualBox VMs/"
)

$backup_cmd "${backup_arguments[@]}"

Seebär

Avatar von Seebär

Anmeldungsdatum:
2. Mai 2009

Beiträge: 833

Nutze doch alternativ einfach --exclude-caches und CACHEDIR.TAG file.

https://borgbackup.readthedocs.io/en/stable/usage/create.html

rarity

(Themenstarter)
Avatar von rarity

Anmeldungsdatum:
19. Februar 2007

Beiträge: 133

Wohnort: Wien

Hallo!

Es funktioniert leider nicht. Bei der Variante von seahawk1986 wird nur mehr /etc/ gesichert. Ich habe auch alles in eine Zeile geschrieben, das half leider auch nicht.

@Seebär: Danke, das würde zwar bei den VMs helfen, allerdings habe ich auch andere Verzeichnisse mit Leerzeichen im Namen die ich nicht sichern will/muss.

Noch ein Nachtrag: Der Tipp von user_unknown mit Wildcard (*) funktioniert. Das löst das Problem, aber komisch finde ich trotzdem dass es scheinbar keine Möglichkeit gibt ein Leerzeichen einzugeben.

Danke!

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13207

rarity schrieb:

Es funktioniert leider nicht.

Wir haben immer noch nicht das vollständige Bild, was Du da jeweils gemacht hast. Von daher können wir auch nicht wirklich gut helfen.

rarity

(Themenstarter)
Avatar von rarity

Anmeldungsdatum:
19. Februar 2007

Beiträge: 133

Wohnort: Wien

Hallo!

@rklm:

1
2
3
4
5
sicherung=(
/etc/
/home/
--exclude /home/thomas/VirtualBox VMs/
)

hier wird nur /etc/ gescichert, sonst nichts.

1
2
3
4
5
sicherung=("
/etc/
/home/
--exclude /home/thomas/VirtualBox*
")

Das funktioniert. Löst das aktuelle Problem. Wenn es eine Möglichkeit gäbe doch den kompletten Pfad mit Leerzeichen (VirtualBox VMs) aufzunehmen wäre das eleganter/sicherer.

Danke!

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13207

rarity schrieb:

1
2
3
4
5
sicherung=(
/etc/
/home/
--exclude /home/thomas/VirtualBox VMs/
)

Das ist falsch. Du musst auch im Array richtig quoten:

1
2
3
4
5
sicherung=(
/etc/
/home/
--exclude '/home/thomas/VirtualBox VMs/'
)
1
2
3
4
5
sicherung=("
/etc/
/home/
--exclude /home/thomas/VirtualBox*
")

Das funktioniert.

Ist aber sinnlos, weil Du ein Array benutzt um nur einen Wert zu speichern.

rarity

(Themenstarter)
Avatar von rarity

Anmeldungsdatum:
19. Februar 2007

Beiträge: 133

Wohnort: Wien

Hallo @rklm!

Wenn ich diese Form verwende:

1
2
3
4
5
sicherung=(
/etc/
/home/
--exclude '/home/thomas/VirtualBox VMs/'
)

Dann wird nur /etc/ gesichert. Scheinbar funktioniert hier der Zeilenumbruch nicht. Kann/muss man den irgendwie angeben?

Danke!

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13207

rarity schrieb:

Hallo @rklm!

Wenn ich diese Form verwende:

1
2
3
4
5
sicherung=(
/etc/
/home/
--exclude '/home/thomas/VirtualBox VMs/'
)

Dann wird nur /etc/ gesichert. Scheinbar funktioniert hier der Zeilenumbruch nicht. Kann/muss man den irgendwie angeben?

Ob er funktioniert, kannst Du super leicht selbst ausprobieren, indem Du das Array ausgibst. echo "${#sicherung[@]} - ${sicherung[@]}"

PS: das Kommando set -x in einem Shell-Skript wirkt auch Wunder!

Antworten |