ubuntuusers.de

rsync shell script bricht mit Fehlermeldung ab

Status: Gelöst | Ubuntu-Version: Ubuntu 18.04 (Bionic Beaver)
Antworten |

claus56

Anmeldungsdatum:
24. Dezember 2019

Beiträge: 172

Wohnort: Pfälzer Wald

Hallo, ich hab ein kleines rsync shell script angepasst doch leider bricht es beim Aufruf ab. Das Zielverzeichnis hat den Pfad /media/claus/My BooK/... Bei der Variablen TARGET habe ich den Pfad mit ".. " versehen - leider ohne Erfolg. Auch habe ich beim nächsten Versuch das Leerzeichen mit \ maskiert - hat auch nichts gebracht. Im Codeblock ist die Fehlermeldung und anschließend die wenigen Zeilen vom Script

rsync: link_stat "/media/claus/My" failed: No such file or directory (2)
rsync: mkdir "/home/claus/test_shell_scripts/Book/Backup_home_claus_02092020" failed: No such file or directory (2)
rsync error: error in file IO (code 11) at main.c(675) [Receiver=3.1.2]
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
SOURCES="/home/claus/Dokumente"

# Ziel des Backups.
TARGET="/media/claus/My Book/Backup_home_claus_02092020"
# TARGET="/home/claus/test_shell_scripts/Dokumente_Test/"

# Parameter zum Synchronisieren
# --delete bewirkt ein Datenabgleich inklusive Löschen auf dem Backupmedium
RSYNCCONF="--delete"

# Dateiname des Logfile
LOGFILE="rsync_log.log"

# Ort der Binär-Datei von "rsync"
RSYNC=`which rsync`

# Befehl
$RSYNC -avrpuE $RSYNCCONF $SOURCES $TARGET > $LOGFILE
# echo "$RSYNC -avrpuE $RSYNCCONF $SOURCES $TARGET > $LOGFILE"

exit 0

Also im Grunde macht nur der TARGET PFAD Probleme.Gebe ich einen anderen Pfad an funktioniert es. Ich komme einfach nicht weiter. Vielleicht kann mir jemand einen Tipp geben was ich da falsch mache.

Bearbeitet von rklm:

Syntaxhighlighting. Bitte beachte Forum/Syntax!

ChickenLipsRfun2eat Team-Icon

Anmeldungsdatum:
6. Dezember 2009

Beiträge: 12067

Hallo!

Das Problem ist das Leerzeichen bei „My Book“. Entweder quotest (Anführungszeichen) du das im Aufruf oder setzt ein '\ ' an Stelle des Leerzeichens. Besser ist das korrekte Quoting, weil es dann auch bei einer Pfadänderung funktioniert.

Also "$TARGET" anstatt $TARGET.

claus56

(Themenstarter)

Anmeldungsdatum:
24. Dezember 2019

Beiträge: 172

Wohnort: Pfälzer Wald

Mensch super genau das war's. Ich hab mich abgemüht den Pfad zu quoten bzw. das Leerzeichen bei My Book zu maskieren. Das ich auch die Variable qouten muss - darauf wäre ich jetzt nicht gekommen.

Vielen Dank und Gruß Claus

ChickenLipsRfun2eat Team-Icon

Anmeldungsdatum:
6. Dezember 2009

Beiträge: 12067

Dann markiere das Thema noch als gelöst, wenn es das für dich ist. Frohes „backuppen“ 😉

claus56

(Themenstarter)

Anmeldungsdatum:
24. Dezember 2019

Beiträge: 172

Wohnort: Pfälzer Wald

Nur noch mal ganz kurz. Das Maskieren des Leerzeichens alleine mit \ habe ich probiert (ohne quoten des Variable $TARGET). Das hat nicht funktioniert. Man muss also genau, wie Du beschrieben hast, auf jeden Fall die Variable beim Befehl quoten - "$TARGET". Ich werde das Thema als gelöst markieren.

Dir noch eine schönen Tag. Claus

ChickenLipsRfun2eat Team-Icon

Anmeldungsdatum:
6. Dezember 2009

Beiträge: 12067

TARGET=/media/claus/My\ Book/Backup_home_claus_02092020

sollte eigentlich™ auch funktionieren.

claus56

(Themenstarter)

Anmeldungsdatum:
24. Dezember 2019

Beiträge: 172

Wohnort: Pfälzer Wald

genau so habe ich es gemacht - aber bash interpretiert das als Zeilenumbruch. Warum auch immer???

ChickenLipsRfun2eat Team-Icon

Anmeldungsdatum:
6. Dezember 2009

Beiträge: 12067

claus56 schrieb:

genau so habe ich es gemacht - aber bash interpretiert das als Zeilenumbruch. Warum auch immer???

Mein Fehler:

TARGET='/media/claus/My\ Book/Backup_home_claus_02092020'

Mit den einzelnen Anführungszeichen bleibt das '\ ' erhalten, ansonsten wird es im $TARGET wieder durch ein einfaches Leerzeichen ersetzt.

claus56

(Themenstarter)

Anmeldungsdatum:
24. Dezember 2019

Beiträge: 172

Wohnort: Pfälzer Wald

ich hatte das so geschrieben, was quatsch ist:

TARGET="/media/claus/My\ Book/Backup_home_claus_02092020"

Axel-Erfurt

Anmeldungsdatum:
18. Mai 2016

Beiträge: 1347

Bei Anführungszeichen sollte es doch so aussehen?

TARGET="/media/claus/My Book/Backup_home_claus_02092020"

claus56

(Themenstarter)

Anmeldungsdatum:
24. Dezember 2019

Beiträge: 172

Wohnort: Pfälzer Wald

Hi Axel, genau so hatte ich es am Anfang bevor ich im Forum die Frage stellte. Das funktioniert bei mir nicht. Erst nach dem Tipp mit der Quotierung in Befehl "$TARGET" konnte ich den rsync ohne Fehler laufen lassen (bzw. der läuft jetzt immer noch)

ChickenLipsRfun2eat Team-Icon

Anmeldungsdatum:
6. Dezember 2009

Beiträge: 12067

Axel-Erfurt schrieb:

Bei Anführungszeichen sollte es doch so aussehen?

Es geht um die Zeile

$RSYNC -avrpuE $RSYNCCONF $SOURCES $TARGET > $LOGFILE

Wenn da die Variable nicht gequotet wird, muss das Leerzeichen escaped werden. Und ja, wir sind uns alle einig, dass die Variablen da gequotet gehören. Es geht ja nur um einen alternativen Weg, der wäre eben

TARGET='/media/claus/My\ Book/Backup_home_claus_02092020'
$RSYNC -avrpuE $RSYNCCONF $SOURCES $TARGET > $LOGFILE

Bei der Methode bleibt das escapte Leerzeichen vorhanden, da die einzelnen Anführungszeichen eine Ersetzung durch die bash verhindern.

Antworten |