PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : rsync und rekursives Kopieren


Watson007
2010-03-01, 14:04:59
ich hab da ein Problem mit rsync. Irgendwie kopiert er nie rekursiv, also beachtet die Unterordner nicht.

Also ich will was von A nach B kopieren, und zwar nur Dateien mit bestimmten Dateiendungen. Es gibt in A einen Unterordner, nennen wir ihn A1, und der enthält auch Dateien mit den bestimmten Dateiendungen.

Obwohl ich die Option -a angegeben habe, die ja die Option rekursiv enthält, kopiert er nur Dateien direkt aus dem Ordner A mit diesen Endungen, aber nicht aus A1 mit diesen Endungen.

Der Befehl lautet:

rsync -avzu --include-from=/A/incFile.txt --exclude=* /A/ /B/

die incFile.txt gibt an, welche Dateiendungen er beachten soll - wenn ich den exclude-Parameter nicht angeben würde, würde er andere als die angegebenen Dateiendungen nicht ausschließen.

ich hasse es, wenn ich an so nem Killefitz scheitere...

sei laut
2010-03-01, 16:03:53
Warum a?
-r steht für rekursiv.

-a ist Archiv Modus.

Jedenfalls laut manpage:
http://ss64.com/bash/rsync.html

Watson007
2010-03-01, 16:10:34
http://www.linupedia.org/opensuse/Rsync

# -a umfasst folgende Optionen (Die Option zu verwenden ist sinnvoll, da die Rechte im Ziel übereinstimmen sollten):

* -r kopiert Unterverzeichnisse, lässt rsync rekursiv arbeiten
* -l kopiert symbolische Links
* -p behält Rechte bei
* -t behält Zeiten bei,
* -g behält Gruppenrechte bei
* -D behält Gerätedateien bei; nur root



aber auch wenn ich -r mit angebe, ändert das nichts. Bin ja nicht doof, das habe ich natürlich auch schon probiert.

fezie
2010-03-01, 16:17:08
Das hier steht auch in der manpage, allerdings eher am Ende:

INCLUDE/EXCLUDE PATTERN RULES
[...]
Note that, when using the --recursive (-r) option (which is implied by -a), every subcomponent of every path is visited from the top down, so include/exclude patterns get applied recursively to each subcomponent's full name (e.g. to include "/foo/bar/baz" the subcomponents "/foo" and "/foo/bar" must not be excluded). The exclude patterns actually short-circuit the directory traversal stage when rsync finds the files to send. If a pattern excludes a particular parent directory, it can render a deeper include pattern ineffectual because rsync did not descend through that excluded section of the hierarchy. This is particularly important when using a trailing '*' rule. For instance, this won't work:

+ /some/path/this-file-will-not-be-found
+ /file-is-included
- *

This fails because the parent directory "some" is excluded by the '*' rule, so rsync never visits any of the files in the "some" or "some/path" directories. One solution is to ask for all directories in the hierarchy to be included by using a single rule: "+ */" (put it somewhere before the "- *" rule)

Also versuchs mal mit */ in deiner Include Datei.

Watson007
2010-03-01, 16:34:37
jaaa, jetzt macht er es endlich, danke :)

wobei mein Englisch nicht sooo gut ist, so auf Anhieb verstehe ich nicht was da steht...

ich bin zu blöd :(

fezie
2010-03-01, 16:48:33
Mit --exclude=* schließt du bereits die Verzeichnisse direkt in /A/ aus bevor rsync in das Verzeichnis geht um zu schauen ob dort eine Datei ist die durch --include-from= eigentlich mit dabei sein sollte.
Es wird halt erst /A/xxx geprüft und ausgeschlossen bevor /A/xxx/datei.foo geprüft wird.

Watson007
2010-03-01, 16:56:57
hm aber ich hatte es doch auch mit --exclude=*.* versucht, das Ergebnis war dasselbe...