rsync synchronisiert die .htaccess-Datei nicht

89

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 außer .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 behebt. Ich laufe als Root-Benutzer.

Vielen Dank

Gelassenheit
quelle
1
Ich habe Sie mit einer Antwort zufrieden, Sie sollten es akzeptieren: meta.stackexchange.com/questions/5234/…
Kutzi

Antworten:

108

Dies liegt daran, dass *standardmäßig alle Dateien im aktuellen Arbeitsverzeichnis mit Ausnahme der Dateien, deren Name mit einem Punkt beginnt, erweitert werden. Daher werden rsyncdiese Dateien niemals als Argumente empfangen.

Sie können .das aktuelle Arbeitsverzeichnis an Folgendes übergeben rsync:

rsync -av . server2::sharename/B

Auf diese Weise rsyncwird nach Dateien gesucht, die im aktuellen Arbeitsverzeichnis übertragen werden sollen, anstatt nach Dateien zu suchen, die *erweitert werden.

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

shopt -s dotglob

Siehe auch shopt manpage .

Adam Zalcman
quelle
7
Tatsächlich '.' löst das Problem, zB rsync -avz [email protected]:/remote/path/. /destination/patherledigt den Job
Mariusz Nowak
54

Für alle , die zwischen Servern (inklusive aller versteckten Dateien) sync Verzeichnisse versuchen , ist einfach - zB die Synchronisierung somedirAauf source-serverzu somedirBauf einem Zielserver - versuchen Sie dies :

rsync -avz -e ssh --progress user@source-server:/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, rsyncBefehle vom Zielserver auszuführen , da es einfacher ist, sicherzustellen, dass ich über den richtigen Schreibzugriff verfüge (dh ich muss möglicherweise sudoden obigen Befehl ergänzen ).

Wahrscheinlich selbstverständlich, aber Ihr Remote-Benutzer benötigt natürlich auch Lesezugriff somedirAauf Ihren Quellserver. :) :)

Brian Lacy
quelle
War es das Flag -e, das die .htaccessDatei synchronisiert ?
Jesse Burcsik
@JesseBurcsik Nein, das -e sshgibt die Verbindungsmethode an.
Tripleee
1
Sie brauchen nur einen Schrägstrich auf der Quelle, das Ziel spielt keine Rolle
Jonas Stensved
26

Ich hatte das gleiche Problem.

Als ich den folgenden Befehl ausführte, wurden die versteckten Dateien nicht synchronisiert

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 , da Brian Lacy sagte, die Schrägstriche seien der Schlüssel. Ich habe nicht den Ruf, seinen Beitrag zu kommentieren, sonst hätte ich das getan.

Harleygolfguy
quelle
1
shopt -s dotglob
Fügen Sie
3

Ich denke, das Problem ist auf die Erweiterung des Shell-Platzhalters zurückzuführen. 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.

vkraemer
quelle
3

Das *weist rsynch an, versteckte Dateien nicht zu synchronisieren. Sie sollten es nicht auslassen.

DonCallisto
quelle