Ich habe ein Verzeichnis mit Tausenden von Unterverzeichnissen geladen:
/home/tmp/
1
12
123
1234
2345
234
3456
345
34
Jedes Unterverzeichnis hat wiederum Hunderte von Unterverzeichnissen, die ich synchronisieren möchte, wenn das Unterverzeichnis der ersten Ebene übereinstimmt ...
Was ich brauche, ist eine Möglichkeit, nur die Verzeichnisse zu kopieren / rsync, die mit einer bestimmten Ziffer beginnen [1-9] ...
Was ich zu wollen glaube, ist im Grunde etwas, das es mir ermöglichen würde, Wildcards zum Matching zu verwenden
rsync -rzvvhP remotehost:/home/tmp/1* /home/tmp/
Ich möchte, dass rsync das synchronisiert
/home/tmp/1/
/home/tmp/12/
/home/tmp/123/
/home/tmp/1234/
Verzeichnisse und untergeordnete Unterverzeichnisse, die sie haben, aber keines der Verzeichnisse der ersten Ebene, die mit einer anderen Ziffer beginnen ...
/home/tmp/234/
/home/tmp/2345/
........./3*/
........./4*/ etc..
Was ich versucht habe:
rsync -rzvvhP --exclude='*' --include-from=1.txt remotehost:/home/tmp/ /home/tmp/
wo 1.txt enthält:
1
12
123
1234
Wenn ich dies mit 2.txt mache, obwohl rsync immer noch alle Verzeichnisse zu durchlaufen scheint, die mit 1 und 3 usw. beginnen ...
Wie kann ich dies tun, damit ich nur die Verzeichnisse mit einem Befehl synchronisieren kann, die mit einer bestimmten Ziffer beginnen?
'remotehost:/home/tmp/1*'
eher als ohne die einfachen Anführungszeichen.rsync -rzvvhP remotehost:/home/tmp/1* /home/tmp/
?Antworten:
Was Sie vorgeschlagen haben, sollte tatsächlich funktionieren:
(
*
In den meisten Fällen kann es vorkommen, dass Sie das nicht zitieren , daremotehost:/home/tmp/1\*
es unwahrscheinlich ist, dass das Muster mit einer Datei übereinstimmt, sodass es bei den meisten Shell-Setups allein gelassen wird.)Ihr Versuch mit ist
--exclude='*'
fehlgeschlagen, da die erste Übereinstimmung gilt und Ihre erste Übereinstimmung für alles (*
) besagt, dass sie ausgeschlossen werden soll.In diesem Handbuch finden Sie einige allgemeine Prinzipien zu Rsync-Filtern.
1
Um hier nur Verzeichnisse einzuschließen, die mit der obersten Ebene beginnen, und alles in eingeschlossene Unterverzeichnisse zu kopieren, schließen Sie ein/1
und schließen Sie es aus/*
.quelle
rsync -rzvvhP --size-only --filter="+ /4*/" --exclude='/*'
... ist das, was ich letztendlich verwendet habe ... das Problem, von dem ich glaube, dass das Problem darin bestand, dass der Ausschluss zuerst kam ... dies von einem Include zu einem Filter zu ändern.