2016-12-28 4 views
4

ich rsync zu nutzen versuchen eine unfertige Übertragung von einem entfernten Server zu einem lokalen Rechner zu vervollständigenrsync --exclude-aus ‚Liste‘ Datei nicht funktionierte

rsync -a [email protected]:~/source/ /dest/ 

mit der /dest/ die Lage der teilweise ist abgeschlossene Übertragung Jedoch Bedenken wegen der Bandbreite benötige ich rsync zu einem /tmp_dest/ auf einer anderen Maschine laufen zu lassen, die nicht eine Kopie /dest/ hat, von wo aus kann ich dann später /tmp_dest/-/dest/

Die Lösung bewegen habe ich mit so weit kommen Verwenden Sie die Option --exclude-from von rync, indem Sie eine Datei verwenden, die eine vollständige Liste der Dateien von /dest/ enthält.

Der Befehl würde in etwa so aussehen

rsync -a --exclude-from 'list.txt' [email protected]:~/source/ /tmp_dest/ 

An diesem Punkt fühle ich mich, als ob ich für eine Lösung überall gescheuert haben und versucht, jede Variante stieß ich auf.

Diese enthalten relativen und absoluten Pfade für den 'list.txt'

relativ:

path 1/file 1 
path 2/file 2 

--oder--

absolute:

/absolute/source/path 1/file 1 
/absolute/source/path 2/file 2 

I mit der oben versucht haben, Kombinationen von einschließlich - explizit ex Clude diese Zeile (wo ich Beispiele von Menschen gesehen haben, wollen auch + andere Dateien)

- /absolute/source/path 1/file 1 
- /absolute/source/path 2/file 2 

ich versucht habe, setzen führende **/ vor den Dateipfaden

**/path 1/file 1 
**/path 2/file 2 

den relativen Pfad Problem zu beheben Ich habe auch versucht, zu dem Verzeichnis zu navigieren, das 'list' enthält und Rsync von dort auszuführen, um das Problem zu vermeiden, in dem rsync nach

/path/to/the/list/something1/to.exclude 
/path/to/the/list/something2/to.exclude 
/path/to/the/list/something3/to.exclude 
sucht

und zweifellos nichts zu finden

Ich habe auch darauf hingewiesen, dass die richtigen Zeilenumbrüche in der 'Liste' Datei verwendet werden. , d. H.LF (Unix) Zeilenumbrüche.


Ich habe versucht, die 'list' mit dem folgenden Befehl

find . -type f | tee list.txt 

dies zunächst eine Datei erstellt sucht so etwas wie diese

./yyyy-mm-dd folder 1/sub folder [foo]/file.a 
./(yyyy) folder 2 {foo2}/file.b 
./folder, 3/sub-folder 3/file.c 

zu erstellen, wie Sie sehen können, gibt es Räume und andere Zeichen in den Dateipfaden, aber nach meinem derzeitigen Verständnis, sollte dies nicht beeinflussen.Aber vielleicht täusche ich mich und alle Zeichen mit besonderer Bedeutung entkommen müssen, was ich kann dann mit

Hilfe benötigen, die ich dann auf ./ im Notizblock ersetzen ausführen ++ oder einem anderen Text-Editor, der die LF (Unix) Linie bewahrt bricht, um das gewünschte Ergebnis zu erhalten. (zB wie oben, habe ich versucht, ./ mit nichts zu ersetzen, mit /absolute/path/for/source/ den führenden Schrägstrich zu notieren, oder sogar doppelte Platzhalter alle Eltern Baumstruktur entsprechen die Dateien enthält.

Das einzige, was ich fühle, dass ich haven ‚t versucht wird, die Leerzeichen in den Dateinamen und Pfade zu entkommen, aber ich habe gelesen, dass dies kein Problem sein sollte.

Vielleicht bin ich etwas mit Blick auf jede mögliche Hilfe würde geschätzt.

+0

Notepad ++? Bist du sicher, dass du Linux benutzt? :-P Wie auch immer, ich habe einige Tests gemacht und kann diesen Fehler nicht reproduzieren. Wenn die Pfade in 'list.txt' relativ zu' source/'sind, ohne'./'Am Anfang, mit oder ohne' -', mit oder ohne '** /', schließt mein rsync sie korrekt von der Übertragung aus . Mein Vorschlag: Sehen Sie, ob Sie dieses Problem mit einer lokalen Übertragung reproduzieren können, d. H. Einfach zwischen Ordnern auf demselben System mit nur wenigen Dateien kopieren. –

+0

Ja notepad ++ @ david-z: P das ist auf einem Windows-Feld (Atom von atom.io war beim Start einfrieren, aber das ist ein anderes Problem für einen anderen Tag). Ich verwende ssh, um rsync auf dem betroffenen zfs-Server auszuführen. Ich gebe das eine Chance, obwohl ich anfange zu denken, dass es die Sonderzeichen sind, die es zumindest abwerfen. Ich bin mir nicht sicher, was "pattern" '--exclude-from' verwendet (ist es Regex), aber es scheint einige Zeichen zu geben, die escape [link] (https://www.boards.ie/b/thread/2056322749) –

+0

Wenn das der Fall ist, gibt es wenig Hoffnung, dass jemand diese Frage beantworten kann, ohne genau zu wissen, welche Dateinamen für Sie funktionieren und welche nicht. Ein Teil des Grundes, den ich Ihnen rate, es mit einer kleinen lokalen Übertragung zu reproduzieren, ist so, dass, wenn Sie es nicht selbst lösen, Sie eine [komplette] (https://stackoverflow.com/help/mcve) Liste von veröffentlichen können Dateinamen, mit denen andere das Problem reproduzieren können. –

Antwort

0

Hier ist aus rsync man page wie man "--exclude-from" benutzt: --exclude-from = DATEI lesen ausschließen Muster von FILE

Verwenden Sie den folgenden Befehl ein: rsync -a --exclude-from = list.txt [email protected]: ~/Quelle// tmp_dest/

Und auch ist es besser, Verwenden Sie den vollständigen Pfadnamen der Datei list.txt

+0

Danke, aber es scheint keinen Unterschied zwischen 'rsync -anv --exclude-from =/home/rsync zu geben.exclude/source// empty_dir/'und' rsync -anv --exclude-from '/home/rsync.exclude'/source// empty_dir/'. Ich war anfangs ein wenig verwirrt, als ich die übliche Verwendung der letzteren sah, aber soweit ich das beurteilen kann, gibt es keinen Unterschied zwischen den beiden. Können Sie bitte erläutern, was Sie damit meinen, dass es besser ist, den vollständigen Pfadnamen list.txt zu verwenden. –