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...
vBulletin®, Copyright ©2000-2025, Jelsoft Enterprises Ltd.