[gelöst]rsync --exclude und Leerzeichen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
Rubberduck
Beiträge: 177
Registriert: 14.07.2013 21:48:19
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Langenfeld Rheinland

[gelöst]rsync --exclude und Leerzeichen

Beitrag von Rubberduck » 04.08.2013 23:39:44

Hallo,

wie ich feststelle, ein häufig vorkommendes Thema und auch hier im Forum wurde rsync oft besprochen.
Ich finde trotzdem keine Lösung für mein Problem.

* es wird täglich ein Medienverzeichnis von mir via rsync über ssh zu einem Kollegen gesyncht (vpn)
* Ohne exclude ist das alles kein Problem, einerseits gibt es aber Ordner, die ich nicht synchen möchte, andererseits möchte ich das
Problem verstehen.

Ich habe es mit single Quotes, double Quotes, Pfad ausschreiben, Exclude Liste, In der Form "Star\ Trek\ Voyager" geschrieben,
einfach mit allem versucht was ich recherchieren konnte.
Immer die gleichen Fehlermeldungen:
mit exclude:
rsync: Failed to exec --exclude=/share/02_Video/Serien/Star Trek Voyager: No such file or directory (2)
rsync error: error in IPC code (code 14) at pipe.c(84) [sender=3.0.9]
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(605) [sender=3.0.9]
Selbstverständlich gibt es den Pfad, denn das Skript syncht es ja gnadenlos ohne exclude...

Code: Alles auswählen

host="admin@ip-adresse:"
source="/share/02_Video/Serien/"
target="/share/Multimedia/02_Video/Serien/"
opt="ssh -i /Pfad zum ssh key/DEV-SRV01-rsync-key"
exc='"--exclude=/share/02_Video/Serien/Star Trek Voyager"'

rsync -azP -e --exclude="'/share/02_Video/Serien/Star Trek Voyager'" "$opt" "$source" "$host""$target" 

# rsync -azP  -e "$exc" "$opt" "$source" "$host""$target"  
Habt ihr eine Idee, ich kann doch nicht der Einzige mit dem Problem sein...
Rubberduck
Zuletzt geändert von Rubberduck am 05.08.2013 21:26:59, insgesamt 3-mal geändert.

linuxCowboy
Beiträge: 287
Registriert: 05.02.2013 19:47:41

Re: rsync --exclude und Leerzeichen

Beitrag von linuxCowboy » 05.08.2013 00:05:34

Ich rsync auch gerade meine Video-Sammlung. Es hat sich bewährt, keine Umlaute und Leerzeichen zu haben.

Beim Einsortieren habe ich das per Script sichergestellt.

z.B.:

Code: Alles auswählen

alias uml="sed 's/ä/ae/g;s/ö/oe/g;s/ü/ue/g;s/Ä/Ae/g;s/Ö/Oe/g;s/Ü/Ue/g;s/ß/ss/g;s/é/e/g'"
Das einfach in die pipe mit sed einbinden. Umbenennen mit Perl rename.

Hier habe ich noch ein Script für dich für den Serien-Header:

Code: Alles auswählen

#!/bin/bash
#
episodes_in_season=( 16 26  26 26  26 26  25 )

for season in `seq ${#episodes_in_season[@]}`; do
	for episodes in `seq -w ${episodes_in_season[$i]}`; do
		echo $season${episodes}__
	done
	(( ++i ))
done
...es erzeugt 101__ bis 725__ passend für Voyager :THX:
-der_linux_cowboy --- Besser werden! ... f*** w$$

Benutzeravatar
4A4B
Beiträge: 962
Registriert: 09.11.2011 11:19:55
Kontaktdaten:

Re: rsync --exclude und Leerzeichen

Beitrag von 4A4B » 05.08.2013 00:10:15

Ich glaube hinter --exclude sollte "Star Trek Voyager" stehen, statt "/share/02_Video/Serien/Star Trek Voyager"

Der Slash am Anfang besagt nicht, dass der Pfad absolut zu verstehen ist, siehe "man rsync" im Abschnitt "INCLUDE/EXCLUDE PATTERN RULES":
o if the pattern starts with a / then it is anchored to a particular spot in the hierarchy of files, otherwise
it is matched against the end of the pathname.
Die Pfade sind immer relativ zum Source-Pfad zu verstehen.

Siehe auch hier, unter "4. Exclude path is always relative":

http://www.thegeekstuff.com/2011/01/rsy ... d-folders/

Benutzeravatar
Rubberduck
Beiträge: 177
Registriert: 14.07.2013 21:48:19
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Langenfeld Rheinland

Re: rsync --exclude und Leerzeichen

Beitrag von Rubberduck » 05.08.2013 07:54:25

@linuxCowboy:

Danke für deine Infos.
ich möchte bei mir garnichts "einsortieren", ich möchte meine Sortierung so wie sie ist synchen - und zwar mit Leerzeichen.
Und ich ich möchte ehrlich gesagt auch nicht noch ein SED Studium hinlegen und auch noch zusätzlich ne andere Programmier Sprache lernen
um einen Pfad mit Leerzeichen in meinen rsync Job einzubauen. Das erscheint mir etwas grotesk.
Aber trotzdem vielen Dank, die Kritik ging nicht an dich!

@4A4B
Ich hoffe mal dass das der Grund ist und werde das heute Abend ausprobieren.
Du meinst also auch..Man Pages lesen würde helfen ? *g
Danke

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: rsync --exclude und Leerzeichen

Beitrag von rendegast » 05.08.2013 09:17:57

4A4B hat geschrieben: Ich glaube hinter --exclude sollte "Star Trek Voyager" stehen, statt "/share/02_Video/Serien/Star Trek Voyager"
Oder auch

Code: Alles auswählen

--exclude /Star Trek Voyager/
resp.
--exclude /Star\ Trek\ Voyager/
Rubberduck hat geschrieben: Du meinst also auch..Man Pages lesen würde helfen ? *g
Halte die man-page von rsync für kryptisch (aber wohl der Komplexizität geschuldet(?)).
Eher so als "da gibt es solche Syntax-Spielereien".
Was dann letztendlich für einen funktioniert, ist erst durch Auszuprobieren herauszubekommen.
Daraus folgen dann mehr oder weniger komplexe Skripte.
Ein Frontend ist wohl ratsam, und auch dessen Funktion ist erstmal zu üben, insbesondere im Restore.
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

Benutzeravatar
Rubberduck
Beiträge: 177
Registriert: 14.07.2013 21:48:19
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Langenfeld Rheinland

Re: rsync --exclude und Leerzeichen

Beitrag von Rubberduck » 05.08.2013 09:35:33

Perfekt, danke auch dafür.
Werde ich heute Abend alles testen.

Benutzeravatar
Rubberduck
Beiträge: 177
Registriert: 14.07.2013 21:48:19
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Langenfeld Rheinland

Re: rsync --exclude und Leerzeichen

Beitrag von Rubberduck » 05.08.2013 18:23:09

Es ist einfach nicht zu glauben.
Keine der genannten Möglichkeiten funktioniert!

Das nicht

Code: Alles auswählen

rsync -azP -e --exclude=/Star Trek Voyager/"$opt" "$source" "$host""$target" 
rsync: Failed to exec --exclude=/Star: No such file or directory (2)
Das nicht

Code: Alles auswählen

rsync -azP -e --exclude=/Star\ Trek\ Voyager/ "$opt" "$source" "$host""$target
rsync: Failed to exec --exclude=/Star: No such file or directory (2)

Das nicht; Double Single

Code: Alles auswählen

rsync -azP -e --exclude='"/Star\ Trek\ Voyager/"' "$opt" "$source" "$host""$target" 
rsync: Failed to exec --exclude=/Star\ Trek\ Voyager/: No such file or directory (2)

Auch nicht mit Double Quotes

Code: Alles auswählen

rsync -azP -e --exclude="/Star\ Trek\ Voyager/" "$opt" "$source" "$host""$target"
rsync: Failed to exec --exclude=/Star\: No such file or directory (2)

Und auch nicht so in der Art.

Code: Alles auswählen

sync -azP -e --exclude='"Star Trek Voyager"' "$opt" "$source" "$host""$target"
Bekomm ich nicht auf die Reihe...

Nochmal das ganze Skript

Code: Alles auswählen

host="admin@192.168.0.253:"
source="/share/02_Video/Serien/"
target="/share/Multimedia/02_Video/Serien/"
opt="ssh -i /cert/cron/DEV-SRV01-rsync-key"
exc='"--exclude=/Star Trek Voyager/"'

#rsync -azP -e "$opt" "$source" "$host""$target"

rsync -azP -e --exclude="/Star\ Trek\ Voyager/" "$opt" "$source" "$host""$target" 

#rsync -azP  -e "$exc" "$opt" "$source" "$host""$target" 

thoerb
Beiträge: 1686
Registriert: 01.08.2012 15:34:53
Lizenz eigener Beiträge: MIT Lizenz

Re: rsync --exclude und Leerzeichen

Beitrag von thoerb » 05.08.2013 18:45:47

Nach dem Ubuntuusers-Wiki http://wiki.ubuntuusers.de/rsync müsste das so funktionieren:

Code: Alles auswählen

--exclude=Star\ Trek\ Voyager/

Benutzeravatar
Rubberduck
Beiträge: 177
Registriert: 14.07.2013 21:48:19
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Langenfeld Rheinland

Re: rsync --exclude und Leerzeichen

Beitrag von Rubberduck » 05.08.2013 19:00:33

Nicht das ich nicht schon jede Variante ausprobiert hätte, aber...
here we go

Code: Alles auswählen

rsync -azP -e --exclude=Star\ Trek\ Voyager/ "$opt" "$source" "$host""$target" 
rsync: Failed to exec --exclude=Star: No such file or directory (2)

linuxCowboy
Beiträge: 287
Registriert: 05.02.2013 19:47:41

Re: rsync --exclude und Leerzeichen

Beitrag von linuxCowboy » 05.08.2013 19:22:03

Rubberduck hat geschrieben:Nicht das ich nicht schon jede Variante ausprobiert hätte...
Wer Leerzeichen will muss leiden! :D
-der_linux_cowboy --- Besser werden! ... f*** w$$

Benutzeravatar
Rubberduck
Beiträge: 177
Registriert: 14.07.2013 21:48:19
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Langenfeld Rheinland

Re: rsync --exclude und Leerzeichen

Beitrag von Rubberduck » 05.08.2013 19:26:28

Heureka!
Habe jetzt wie blöd auf mein Skript geschaut...und dann kam eine wage Vermutung, die ich fast schon für lächerlich gehalten habe...
Auch wenn es mir jetzt logisch erscheint, ich kann nicht glauben dass das die Lösung ist.

Da der exclude Pfad aufbaut auf der Quelle, ist rsync natürlich auch erst NACH Definition der Quelle der Exclude Pfad bekannt...
Also die Anordnung von --exclude innerhalb des ganzen Konstrukts war entscheidend...

Code: Alles auswählen

rsync -azP -e  "$opt" "$source" --exclude-from=/share/06_Skripte/qnap/rsync_marco.txt "$host""$target"
Also Exclude List NACH SOURCE.

Danke danke für euren Gehirnschmalz

Rubberduck

Benutzeravatar
smutbert
Beiträge: 8342
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: rsync --exclude und Leerzeichen

Beitrag von smutbert » 05.08.2013 21:17:49

Es ist ja gut wenn es jetzt funktioniert, aber wenn ich mir mein (funktionierendes) Backupscript anschaue, kann das keine Rolle spielen, bei mir steht es nämlich vor der Angabe von Quelle und Ziel, sozusagen in $opt.

Benutzeravatar
Rubberduck
Beiträge: 177
Registriert: 14.07.2013 21:48:19
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Langenfeld Rheinland

Re: rsync --exclude und Leerzeichen

Beitrag von Rubberduck » 05.08.2013 21:24:24

hm naja...danach hat es sofort funktioniert..

kannst du es anders erklären?
gruß

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

Re: [gelöst]rsync --exclude und Leerzeichen

Beitrag von detix » 06.08.2013 07:56:59

Kann es sein, das du den Parameter "-e" falsch einsetzst?
Im ersten Post stehen dahinter die Filter, wo aber lt manpage ein rsh-command folgen sollte.
Im letzen Post steht dahinter dann dein "$opt", oder eben "ssh -i..."
Gruß an alle Debianer, und immer daran denken:
Macht ohne Haftung funktioniert nicht!

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: [gelöst]rsync --exclude und Leerzeichen

Beitrag von rendegast » 06.08.2013 08:12:00

rsync -azP -e --exclude=/Star\ Trek\ Voyager/ "$opt" "$source" "$host""$target
rsync: Failed to exec --exclude=/Star: No such file or directory (2)
Da fällt mir nix zu ein. Vielleicht eine Auswirkung der gesetzten Shell?

Code: Alles auswählen

/tmp/test$ mkdir foo bar "foo bar"
/tmp/test$ ls -1
bar
foo
foo bar
/tmp/test$ cd    <TAB>
bar/     foo/     foo bar/ 
/tmp/test$ cd foo    <TAB>
foo/     foo bar/ 

/tmp/test$ cd foo\ bar/
/tmp/test/foo bar$ 
rsync -azP -e --exclude='"/Star\ Trek\ Voyager/"' "$opt" "$source" "$host""$target"
rsync: Failed to exec --exclude=/Star\ Trek\ Voyager/: No such file or directory (2)
Hier jedoch,
Einerseits werden die Leerzeichen schonmal akzeptiert.
Jedoch durch das Quote werden die Backslashes als wirkliche Zeichen interpretiert,
also ENTWEDER Quotes oder Backslashes.
Dazu hast Du single- und double-Quote kombiniert.
rendegast hat geschrieben: resp.
--exclude /Star\ Trek\ Voyager/

Code: Alles auswählen

resp.
--exclude "/Star Trek Voyager/"
oder(?)
--exclude /"Star Trek Voyager"/
(wobei ich jetzt nicht mehr weiß, warum ich dieses Format ohne "=" habe
(in der man-page so nur einmal aufgeführt.))

Also die Anordnung von --exclude innerhalb des ganzen Konstrukts war entscheidend...
rsync -azP -e "$opt" "$source" --exclude-from=...... .......
Also Exclude List NACH SOURCE.
aka smutbert bei mir

Code: Alles auswählen

....
      rsync -a        $OPTS $EXCLUDES         ${MNT_PATH}$SRVDIR/     $TARGETDIR      | ........
....
wobei der Trick da wohl die Interpretation aus der Datei heraus ist,
da dann scheinbar keine Formal-Probleme auftauchen.
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

Benutzeravatar
Dogge
Beiträge: 1899
Registriert: 13.09.2010 11:07:33
Lizenz eigener Beiträge: MIT Lizenz

Re: rsync --exclude und Leerzeichen

Beitrag von Dogge » 06.08.2013 08:43:52

smutbert hat geschrieben:Es ist ja gut wenn es jetzt funktioniert, aber wenn ich mir mein (funktionierendes) Backupscript anschaue, kann das keine Rolle spielen, bei mir steht es nämlich vor der Angabe von Quelle und Ziel, sozusagen in $opt.
Kann ich mir auch nicht vorstellen. Ich setze zuerst alle Optionen, dann die Quelle und abschließend das Ziel. Benutze zwar kein exclude, aber dafür link-dest (ist auch relativ zur source) und das macht in der Konstellation keine Probleme.
Debian Testing + Gnome | Linux-Anfänger seit 04/2003
http://files.mdosch.de/2014-07/0xE13D657D.asc

Antworten