Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

rsync: Verzeichnisse auf Ziel ignorieren

10 views
Skip to first unread message

Jan Heitkötter

unread,
Mar 17, 2013, 6:13:47 PM3/17/13
to
Hallo zusammen,

ich mᅵchte mit rsync ein Skript basteln, das Dateien vom lokalen Rechner
auf ein NAS schiebt. Mit dem Skript soll der Bestand an Digitalfotos auf
dem NAS auf den Stand gebracht werden, der auf dem Rechner aktuell ist.
Das NAS erzeugt automatisch Vorschaubilder und legt diese in
Unterverzeichnissen (mit festem Namen) ab.

Herausforderung: Die Verzeichnisse mit den Vorschaubildern sollen nicht
gelᅵscht werden. Im Normalfall wᅵrde rsync diese lᅵschen, da sie lokal
nicht vorhanden sind. Wie bekomme ich das mit rsync auf die Reihe?

Mit --exclude kann ich m.W. nur Dateien/Verzeichnisse an der /Quelle/
aussteuern. Hier soll ein Verzeichnis beim /Ziel/ ignoriert werden.

Gruᅵ

Jan

Thomas 'PointedEars' Lahn

unread,
Mar 17, 2013, 10:38:01 PM3/17/13
to
Jan Heitkötter wrote:

> ich möchte mit rsync ein Skript basteln, das Dateien vom lokalen Rechner
> auf ein NAS schiebt. Mit dem Skript soll der Bestand an Digitalfotos auf
> dem NAS auf den Stand gebracht werden, der auf dem Rechner aktuell ist.
> Das NAS erzeugt automatisch Vorschaubilder und legt diese in
> Unterverzeichnissen (mit festem Namen) ab.
>
> Herausforderung: Die Verzeichnisse mit den Vorschaubildern sollen nicht
> gelöscht werden. Im Normalfall würde rsync diese löschen, da sie lokal
> nicht vorhanden sind. Wie bekomme ich das mit rsync auf die Reihe?
>
> Mit --exclude kann ich m.W. nur Dateien/Verzeichnisse an der /Quelle/
> aussteuern. Hier soll ein Verzeichnis beim /Ziel/ ignoriert werden.

Möglicherweise hilft das:

$ cd /tmp

$ mkdir -p rsync/{1,2/bar}

$ cd rsync

$ touch 1/foo

$ touch 2/bar/baz

$ rsync -vr --delete 1/* 2/
sending incremental file list
foo

sent 65 bytes received 31 bytes 192.00 bytes/sec
total size is 0 speedup is 0.00

$ ls -lR 2
2:
total 4
drwxr-xr-x 2 **** **** 4096 Mär 18 03:29 bar
-rw-r--r-- 1 **** **** 0 Mär 18 03:29 foo

2/bar:
total 0
-rw-r--r-- 1 **** **** 0 Mär 18 03:29 baz

$ rsync --version
rsync version 3.0.9 protocol version 30
Copyright (C) 1996-2011 by Andrew Tridgell, Wayne Davison, and others.
Web site: http://rsync.samba.org/
Capabilities:
64-bit files, 64-bit inums, 32-bit timestamps, 64-bit long ints,
socketpairs, hardlinks, symlinks, IPv6, batchfiles, inplace,
append, ACLs, xattrs, iconv, symtimes

rsync comes with ABSOLUTELY NO WARRANTY. This is free software, and you
are welcome to redistribute it under certain conditions. See the GNU
General Public Licence for details.


Falls nicht, könnte die Option -f helfen.

--
PointedEars

Twitter: @PointedEars2
Please do not Cc: me. / Bitte keine Kopien per E-Mail.

Christian Brandt

unread,
Mar 20, 2013, 9:33:59 PM3/20/13
to
On 18.03.2013 03:38, Thomas 'PointedEars' Lahn wrote:

> $ rsync -vr --delete 1/* 2/

entspricht englobt
$ rsync -vr --delete 1/foo 2/
oder anders formuliert
$ rsync -vr --delete 1/foo/. 2/foo/.

"1/*" klappt im speziellem Fall daß alle include/exlude-Daten auf der
gleichen Ebene liegen. Alles andere wird bei mehreren Ebenen auch eher
"häßlich".

Gemein: --delete wirkt immer. Man bräuchte eher sowas wie -prune-path
aus gnufind:

$ rm -R 1 2 && mkdir 1 2 && touch 2/bar 1/foo && rsync -vr --exclude
1/bar --delete 1/ 2 && find
sending incremental file list
deleting bar
foo

sent 75 bytes received 31 bytes 212.00 bytes/sec
total size is 0 speedup is 0.00
.
./2
./2/foo
./1
./1/foo

und das hier sieht nur gut aus ohne wirklich zu helfen:

$ rsync --help | grep delete
--del an alias for --delete-during
--delete delete extraneous files from destination
--delete-before receiver deletes before transfer, not
--delete-during receiver deletes during transfer (default)
--delete-delay find deletions during, delete after
--delete-after receiver deletes after transfer, not during
--delete-excluded also delete excluded files from
--ignore-errors delete even if there are I/O errors
--max-delete=NUM don't delete more than NUM files

--filter ist ebenfalls nur Source-Seitig und alles was man source-seitig
ausschließt wird im Ziel gelöscht.

Ich hab ein ähnliches Problem bauernschlau dadurch gelöst daß mittels
--delete gesichert wird:

/wichtig nach /backup/wichtig

und ohne --delete

/wichtig/foo/bar/static nach /backup/wichtig-foo-bar-static

Nicht schön aber selten. Will man schönen Anschein erhalten könnte man
das Verzeichnis vorher/nachher passend verschieben. Was aber nur eine
Fehlerquelle mehr ist.

--
Christian Brandt

life is short and in most cases it ends with death
but my tombstone will carry the hiscore

Thomas 'PointedEars' Lahn

unread,
Mar 22, 2013, 10:55:53 AM3/22/13
to
Christian Brandt wrote:

> On 18.03.2013 03:38, Thomas 'PointedEars' Lahn wrote:
>> $ rsync -vr --delete 1/* 2/
>
> entspricht englobt
> $ rsync -vr --delete 1/foo 2/

Das gälte, wenn 1/foo die einzige Datei im Verzeichnis 1/ wäre.

> oder anders formuliert
> $ rsync -vr --delete 1/foo/. 2/foo/.

Das gälte, wenn 1/foo die einzige Datei im Verzeichnis 1/ und selbst ein
Verzeichnis wäre.

> "1/*" klappt im speziellem Fall daß alle include/exlude-Daten auf der
> gleichen Ebene liegen. Alles andere wird bei mehreren Ebenen auch eher
> "häßlich".

Der Punkt ist: Wenn man den *Inhalt* des Verzeichnisses synchronisiert statt
das Verzeichnis selbst, werden anscheinend auch mit --delete die Inhalte des
Zielverzeichnisses, die sich nicht im Ausgangsverzeichnis befinden, _nicht_
gelöscht.
0 new messages