it-swarm.com.de

rsync synchronisiert die .htaccess-Datei nicht

Ich versuche Verzeichnis A von Server1 mit Verzeichnis B von Server2 zu synchronisieren.

Ich saß im Verzeichnis A von Server1 und führte die folgenden Befehle aus.

rsync -av * server2::sharename/B

das Interessante ist jedoch, dass alle Dateien und Verzeichnisse mit Ausnahme von .htaccess oder versteckten Dateien im Verzeichnis A synchronisiert werden. Alle versteckten Dateien in Unterverzeichnissen werden synchronisiert.

Ich habe auch den folgenden Befehl ausprobiert:

rsync -av --include=".htaccess" * server2::sharename/B

aber die ergebnisse sind die gleichen.

Irgendwelche Ideen, warum versteckte Dateien eines Verzeichnisses nicht synchronisiert werden und wie man es repariert. Ich laufe als root-Benutzer.

vielen Dank

78
Sangfroid

Dies ist auf die Tatsache zurückzuführen, dass * wird standardmäßig auf alle Dateien im aktuellen Arbeitsverzeichnis erweitert, mit Ausnahme der Dateien, deren Name mit einem Punkt beginnt. Daher empfängt rsync diese Dateien niemals als Argumente.

Du kannst passieren . Bezeichnet das aktuelle Arbeitsverzeichnis mit rsync:

rsync -av . server2::sharename/B

Auf diese Weise sucht rsync nach Dateien, die im aktuellen Arbeitsverzeichnis übertragen werden sollen, und nicht nach Dateien, in denen * erweitert um.

Alternativ können Sie den folgenden Befehl verwenden, um * auf alle Dateien erweitern, einschließlich der Dateien, die mit einem Punkt beginnen:

shopt -s dotglob

Siehe auch shopt manpage .

98
Adam Zalcman

Für alle, die nur versuchen, Verzeichnisse zwischen Servern (einschließlich aller versteckten Dateien) zu synchronisieren, z. B. somedirA auf source-server bis somedirB auf einem Zielserver - versuchen Sie dies:

rsync -avz -e ssh --progress [email protected]:/somedirA/ somedirB/

Beachten Sie die Schrägstriche am Ende beider Pfade. Jede andere Syntax kann zu unerwarteten Ergebnissen führen!


Außerdem ist es für mich am einfachsten, rsync Befehle vom Zielserver auszuführen, da es einfacher ist, sicherzustellen, dass ich über den richtigen Schreibzugriff verfüge (dh, ich muss möglicherweise Sudo zum Befehl hinzufügen) über).

Vermutlich selbstverständlich, aber Ihr entfernter Benutzer benötigt natürlich auch Lesezugriff auf somedirA auf Ihrem Quellserver. :)

46
Brian Lacy

Ich hatte das gleiche Problem.

Für mich, als ich den folgenden Befehl ausgeführt habe, wurden die versteckten Dateien nicht rsync'ed

rsync -av /home/user1 server02:/home/user1

Aber als ich die Schrägstriche am Ende der Pfade hinzufügte, wurden die versteckten Dateien synchronisiert.

rsync -av /home/user1/ server02:/home/user1/

Beachten Sie die Schrägstriche am Ende der Pfade, wie Brian Lacy sagte, sind die Schrägstriche der Schlüssel. Ich habe nicht den Ruf, seinen Beitrag zu kommentieren, sonst hätte ich das getan.

19
harleygolfguy

Ich denke, das Problem liegt an der Shell-Wildcard-Erweiterung. Verwenden . statt Stern.

Betrachten Sie den folgenden Beispielverzeichnisinhalt

$ ls -a .
. .. .htaccess a.html z.js

Die Platzhaltererweiterung der Shell übersetzt die Argumentliste, aus der das rsync-Programm stammt

-av * server2::sharename/B

in

-av a.html z.js server2::sharename/B

bevor der Befehl ausgeführt wird.

3
vkraemer

Der Befehl * Weist rsync an, versteckte Dateien nicht zu synchronisieren. Sie sollten es nicht auslassen.

2
DonCallisto