web-dev-qa-db-fra.com

rsync ne synchronise pas le fichier .htaccess

J'essaye de rsync le répertoire A de server1 avec le répertoire B de server2.

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

rsync -av * server2::sharename/B

mais ce qui est intéressant, c’est que tous les fichiers et répertoires sont synchronisés, à l’exception de .htaccess ou de tout fichier caché du répertoire A. Tous les fichiers cachés des sous-répertoires sont synchronisés.

J'ai aussi essayé la commande suivante:

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

mais les résultats sont les mêmes.

Toutes les idées sur la raison pour laquelle les fichiers cachés d’un répertoire ne sont pas synchronisés et comment le corriger. Je cours en tant qu'utilisateur root.

merci

78
Sangfroid

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

Tu peux passer . indiquant le répertoire de travail actuel sur rsync:

rsync -av . server2::sharename/B

De cette façon, rsync recherchera les fichiers à transférer dans le répertoire de travail actuel au lieu de les rechercher dans quoi * s'étend à.

Vous pouvez également utiliser la commande suivante pour créer * élargir à tous les fichiers, y compris ceux qui commencent par un point:

shopt -s dotglob

Voir aussi page de manuel shopt .

98
Adam Zalcman

Pour ceux qui essaient juste de synchroniser les répertoires entre les serveurs (y compris tous les fichiers cachés) - par exemple, la synchronisation de somedirA sur source-server à somedirB sur un serveur de destination - essayez ceci:

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

Notez les barres obliques à la fin des deux chemins. Toute autre syntaxe peut conduire à des résultats inattendus!


En outre, 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 le bon accès en écriture (c’est-à-dire que je pourrais avoir besoin d’ajouter Sudo à la commande. au dessus de).

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

46
Brian Lacy

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

Pour moi quand j'ai fait la commande suivante les fichiers cachés ont pas se rsyncisé

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é synchronisés.

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

Notez les barres obliques à la fin des chemins, Brian Lacy ayant déclaré que les barres obliques étaient la clé. Je n'ai pas la réputation de commenter son message, sinon je l'aurais fait.

19
harleygolfguy

Je pense que le problème est dû à l'expansion des caractères génériques Shell. Utilisation . au lieu de star.

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

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

L’extension générique du shell traduit la liste d’arguments que le programme rsync obtient de

-av * server2::sharename/B

dans

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

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

3
vkraemer

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

2
DonCallisto