100 votes

Rsync ne synchronise pas le fichier .htaccess

Je tente de synchroniser le répertoire A du serveur1 avec le répertoire B du serveur2.

Assis dans le répertoire A du serveur1, j'ai exécuté les commandes suivantes.

rsync -av * server2::sharename/B

mais la chose intéressante est que cela synchronise tous les fichiers et répertoires sauf .htaccess ou tout fichier caché dans le répertoire A. Les fichiers cachés dans les sous-répertoires sont synchronisés.

J'ai également essayé la commande suivante:

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

mais les résultats sont les mêmes.

Des idées sur pourquoi les fichiers cachés du répertoire A ne sont pas synchronisés et comment y remédier. Je suis connecté en tant qu'utilisateur root.

merci

118voto

Adam Zalcman Points 13198

Cela est dû au fait que * est par défaut étendu à tous les fichiers dans le répertoire de travail actuel, sauf les fichiers dont le nom commence par un point. Ainsi, rsync ne reçoit jamais ces fichiers en tant qu'arguments.

Vous pouvez passer . en indiquant le répertoire de travail actuel à rsync:

rsync -av . server2::sharename/B

De cette manière, rsync recherchera les fichiers à transférer dans le répertoire de travail actuel au lieu de les rechercher dans ce que * étend à.

Alternativement, vous pouvez utiliser la commande suivante pour que * s'étende à tous les fichiers, y compris ceux qui commencent par un point:

shopt -s dotglob

Voir aussi manpage de shopt.

61voto

Brian Lacy Points 4408

Pour toute personne qui essaie simplement de synchroniser des répertoires entre serveurs (y compris tous les fichiers cachés) - par exemple, synchroniser somedirA sur source-server vers somedirB sur un serveur de destination - essayez ceci:

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

Remarquez les barres obliques à la fin des deux chemins. Tout autre syntaxe peut entraîner des résultats inattendus!


Aussi, pour moi, il est plus facile d'exécuter des commandes rsync à partir du serveur de destination, car il est plus facile de s'assurer que j'ai un accès en écriture approprié (c'est-à-dire que je pourrais avoir besoin d'ajouter sudo à la commande ci-dessus).

Probablement va sans dire, mais évidemment votre utilisateur distant a également besoin d'avoir un accès en lecture à somedirA sur votre serveur source. :)

34voto

harleygolfguy Points 675

J'ai eu le même problème.

Pour moi, lorsque j'ai exécuté la commande suivante, les fichiers cachés n'ont pas été rsync'és

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

Mais lorsque j'ai ajouté les barres obliques à la fin des chemins, les fichiers cachés ont été rsync'és.

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

Notez les barres obliques à la fin des chemins, comme l'a dit Brian Lacy, les barres obliques sont la clé. Je n'ai pas la réputation pour commenter sa publication sinon je l'aurais fait.

4voto

vkraemer Points 7749

Je pense que le problème est dû à l'extension des caractères génériques de la coquille. Utilisez . au lieu de l'astérisque.

Considérez le contenu du répertoire de l'exemple suivant

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

L'expansion des caractères génériques de la coquille traduit la liste d'arguments que le programme rsync reçoit de

-av * serveur2::nompartage/B

en

-av a.html z.js serveur2::nompartage/B

avant que la commande ne commence à être exécutée.

3voto

DonCallisto Points 9157

Le * indique à rsync de ne pas synchroniser les fichiers cachés. Vous ne devriez pas l'omettre.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X