Blank in Directory-Name und Verwendung in Shell-Script

Hallo,

eine Frage zu der Verwendung von Blanks in Directory-Namen in Shell-Scripts. Vielleicht weiß jemand Rat. Ich habe folgendes Script zur Datensicherung:

#!/bin/bash

declare dir="/home/xyz/.mozilla/firefox/Crash\ Reports"
if  ! -d $dir ]; then
ls -l
RM *; 
ls -l
fi

# Folgende Fehlermeldung erscheint
# /home/xyz/System/backup-home-with-rsync.sh: Zeile 4: : /home/xyz/.mozilla/firefox/Crash: Zweistelliger (binärer) Operator erwartet.
# Was ist falsch?

rsync -abuv --progress /home/xyz /home/backup --exclude "xyz/.cache/" --exclude "xyz/.cache/google-chrome/Default/Cache/" --exclude "/home/xyz/.mozilla/firefox/Crash\ Reports" --exclude "xyz/.cache/mozilla/firefox" --stats

find /tmp -maxdepth 1 -mindepth 1 -print0 | xargs -0r rm -rf

echo
echo "---------------------------------------------------------------------------"
echo "Taste <ENTER> drücken um Sicherungslauf zu beenden; das System muss nun neu gestartet werden!!"
echo
read

Wie kann ich den Fehler oben vermeiden?

LG

Schließe die Variable in Anführungszeichen ein, also:

if  ! -d "$dir" ]; then

Und dann musst du aber auch das \ for dem Leerzeichen im Verzeichnisnamen weglassen, das wird nämlich dann 1:1 übernommen.
Also:

declare dir="/home/xyz/.mozilla/firefox/Crash Reports"

Beim rsync sind die Anführungszeichen scheinbar da, dort hast du eh auch das Problem dass "\ " so wies ist übernommen wird:

rsync -abuv --progress /home/xyz /home/backup --exclude "xyz/.cache/" --exclude "xyz/.cache/google-chrome/Default/Cache/" --exclude "/home/xyz/.mozilla/firefox/Crash\ Reports" --exclude "xyz/.cache/mozilla/firefox" --stats

Das Verzeichnis heißt ja “Crash Reports”, nicht “Crash\ Reports”, oder? :wink:

PS: alternativ könntest du auch das '' bei der Variablendeklaration verwenden, aber dort dann statt den Anführungszeichen:

declare dir=/home/xyz/.mozilla/firefox/Crash\ Reports

Wie sagte der Alte in “Das Boot”?

“Gute Leute muss man haben, gute Leute.”

Danke Dir!!
“$dir” in Anführungszeichen war es wohl.
Das Schlimme ist, man googelt rum, findet was, und dann stimmt der Code vielfach nicht.

Ein Nachtrag noch:
Wie bekomme ich denn die gesamte Ausgabe, also incl. der ersten Zeilen und dem rsync, zusätzlich einen Protokollfile?