2012-01-28 20 views
52

Sto provando a rsync directory A del server1 con la directory B del server2.rsync non sincronizzato .htaccess file

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

rsync -av * server2::sharename/B 

ma la cosa interessante è, sincronizza tutti i file e le directory ad eccezione .htaccess o qualsiasi file nascosti nella directory A. Tutti i file nascosti all'interno di sottodirectory sincronizzate.

Ho anche provato il seguente comando:

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

ma i risultati sono gli stessi.

Qualsiasi idea del perché i file nascosti di una directory non vengano sincronizzati e come risolverli. Sono in esecuzione come utente root.

grazie

+1

Sono soddisfatto di una risposta, dovresti accettarlo: http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work – Kutzi

risposta

71

Ciò è dovuto al fatto che * è per default esteso a tutti i file nella directory di lavoro corrente ad eccezione dei file il cui nome inizia con un punto. Pertanto, rsync non riceve mai questi file come argomenti.

È possibile passare . denota directory di lavoro corrente rsync:

rsync -av . server2::sharename/B 

In questo modo rsync cercherà i file da trasferire nella directory di lavoro corrente invece di cercarli in quello che * espande a.

In alternativa, è possibile utilizzare il seguente comando per fare * espandere a tutti i file, compresi quelli che iniziano con un punto:

shopt -s dotglob 

Vedi anche shopt manpage.

+4

Invero "." risolve il problema, ad es. 'rsync -avz [email protected]:/remote/path /./destination/path' fa il lavoro –

2

Il * indica a rsynch di non sincronizzare i file nascosti. Hai provato a ometterlo?

3

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

consideri il seguente esempio contenuto di directory

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

espansione jolly della shell traduce la lista degli argomenti che il programma rsync riceve da

-av * server2::sharename/B 

in

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

prima che il comando avvia essere giustiziato.

31

Per tutti coloro che cercano solo di sincronizzare le directory tra i server (inclusi tutti i file nascosti) - ad es., La sincronizzazione somedirA su source-server-somedirB su un server di destinazione - provare questo:

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

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


Inoltre, per me la sua più semplice per eseguire rsync comandi dal server di destinazione, perché è più facile per assicurarsi che ho corretto l'accesso in scrittura (vale a dire, potrei avere bisogno di aggiungere sudo al comando precedente).

Probabilmente è ovvio, ma ovviamente il tuo utente remoto deve anche avere accesso in lettura a somedirA sul server di origine. :)

+0

Era il flag -e che sincronizzerà il file '.htaccess'? –

+0

@JesseBurcsik No, '-e ssh' specifica il metodo per la connessione. – tripleee

+0

Hai solo bisogno di una barra sulla sorgente, la destinazione non ha importanza –

9

Ho avuto lo stesso problema.

Per me quando ho fatto il seguente comando i file nascosti fatto non ottenere rsync'ed

rsync -av /home/user1 wobgalaxy02:/home/user1 

Ma quando ho aggiunto le barre al termine dei percorsi, i file nascosti sono stati rsync'ed .

rsync -av /home/user1/ wobgalaxy02:/home/user1/ 

Note le barre al termine dei percorsi, come detto Brian Lacy le barre sono la chiave. Non ho la reputazione di commentare il suo post o l'avrei fatto.