rsync non sincronizza il file .htaccess


91

Sto cercando di sincronizzare nuovamente la directory A di server1 con la directory B di server2.

Seduto nella directory A di server1, ho eseguito i seguenti comandi.

rsync -av * server2::sharename/B

ma la cosa interessante è che sincronizza tutti i file e le directory eccetto .htaccess o qualsiasi file nascosto nella directory A. Tutti i file nascosti all'interno delle sottodirectory vengono sincronizzati.

Ho anche provato il seguente comando:

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

ma i risultati sono gli stessi.

Qualche idea sul perché i file nascosti di una directory non vengono sincronizzati e su come risolverlo. Sto correndo come utente root.

Grazie


1
Sono soddisfatto di una risposta, dovresti accettarla: meta.stackexchange.com/questions/5234/…
Kutzi

Risposte:


109

Ciò è dovuto al fatto che *per impostazione predefinita è espanso a tutti i file nella directory di lavoro corrente tranne i file il cui nome inizia con un punto. Pertanto, rsyncnon riceve mai questi file come argomenti.

Puoi passare la .denotazione della directory di lavoro corrente a rsync:

rsync -av . server2::sharename/B

In questo modo rsynccercherà i file da trasferire nella directory di lavoro corrente invece di cercarli in ciò che si *espande in.

In alternativa, puoi utilizzare il seguente comando per *espandere a tutti i file inclusi quelli che iniziano con un punto:

shopt -s dotglob

Vedi anche la manpage di Shopt .


7
Infatti '.' risolve il problema, ad esempio rsync -avz user@domain.com:/remote/path/. /destination/pathfa il lavoro
Mariusz Nowak

57

Per chi sta solo cercando di directory di sincronizzazione tra i server (inclusi tutti i file nascosti) - ad esempio, la sincronizzazione somedirAsu source-serverper somedirBsu un server di destinazione - provare questo :

rsync -avz -e ssh --progress user@source-server:/somedirA/ somedirB/

Notare le barre alla fine di entrambi i percorsi. Qualsiasi altra sintassi può portare a risultati imprevisti!


Inoltre, per me è più semplice eseguire rsynccomandi dal server di destinazione, perché è più facile assicurarsi di avere un accesso in scrittura appropriato (cioè, potrei aver bisogno di aggiungere sudoal comando sopra).

Probabilmente è ovvio, ma ovviamente anche il tuo utente remoto ha bisogno dell'accesso in lettura al somedirAtuo server di origine. :)


È stato il flag -e che sincronizzerà il .htaccessfile?
Jesse Burcsik

1
@JesseBurcsik No, -e sshspecifica il metodo di connessione.
tripleee

1
Hai solo bisogno di una barra sulla fonte, la destinazione non ha importanza
Jonas Stensved

28

Ho avuto lo stesso problema.

Per me quando ho eseguito il seguente comando, i file nascosti non sono stati rsync'ed

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

Ma quando ho aggiunto le barre alla fine dei percorsi, i file nascosti sono stati rsync.

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

Nota le barre alla fine dei percorsi , poiché Brian Lacy ha detto che le barre sono la chiave. Non ho la reputazione di commentare il suo post o l'avrei fatto.


1
Basta aggiungere shopt -s dotglobal tuo script prima di rsync
Pian0_M4n

3

Penso che il problema sia dovuto all'espansione dei caratteri jolly della shell. Uso . invece di star.

Considera il seguente contenuto di directory di esempio

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

L'espansione con caratteri jolly della shell traduce l'elenco di argomenti da cui prende il programma rsync

-av * server2::sharename/B

in

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

prima che il comando inizi ad essere eseguito.


3

La *dico di rsynch di non sincronizzare i file nascosti. Non dovresti ometterlo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.