linux - remote - unix rsync example




rsync non sincronizza il file.htaccess (4)

Sto provando a rsync la directory A di server1 con la directory B di server2.

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

rsync -av * server2::sharename/B

ma la cosa interessante è che sincronizza tutti i file e le directory tranne .htaccess o qualsiasi file nascosto nella directory A. Qualsiasi file nascosto all'interno delle sottodirectory viene sincronizzato.

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 vengano sincronizzati e come risolverli. Sono in esecuzione come utente root.

Grazie


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

Puoi passare . denotando la directory di lavoro corrente su rsync :

rsync -av . server2::sharename/B

In questo modo rsync cercherà i file da trasferire nella directory di lavoro corrente anziché cercarli in ciò che * espande.

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

shopt -s dotglob

Vedi anche la manpage shopt .


Ho avuto lo stesso problema.

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

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

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

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

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


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

Considera il seguente contenuto di directory di esempio

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

L'espansione jolly della shell traduce l'elenco degli argomenti da cui proviene il programma rsync

-av * server2::sharename/B

in

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

prima che il comando inizi a essere eseguito.


Per chiunque somedirA provando a sincronizzare le directory tra i server (inclusi tutti i file nascosti) - ad esempio, sincronizzando somedirA sul source-server di somedirB a somedirB su un server di destinazione - prova questo :

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

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

Inoltre, per me è più semplice eseguire comandi rsync dal server di destinazione, perché è più facile assicurarsi di avere un accesso di scrittura corretto (ad esempio, potrebbe essere necessario aggiungere sudo al comando precedente).

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





rsync