rsync ne synchronise pas le fichier .htaccess

91

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 qu'il synchronise tous les fichiers et répertoires sauf .htaccess ou tout fichier caché dans le répertoire A. Tous 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.

Toutes les idées pour lesquelles les fichiers cachés du répertoire A ne sont pas synchronisés et comment y remédier. Je cours en tant qu'utilisateur root.

Merci

Sang-froid
la source
1
Je suis satisfait d'une réponse, vous devriez l'accepter: meta.stackexchange.com/questions/5234/…
Kutzi

Réponses:

109

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

Vous pouvez transmettre .le répertoire de travail actuel à rsync:

rsync -av . server2::sharename/B

Cette méthode rsyncrecherchera les fichiers à transférer dans le répertoire de travail actuel au lieu de les rechercher dans quel* développe.

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

shopt -s dotglob

Voir aussi la page de manuel shopt .

Adam Zalcman
la source
7
En effet '.' résout le problème, par exemple rsync -avz [email protected]:/remote/path/. /destination/pathfait le travail
Mariusz Nowak
57

Pour toute personne qui vient d' essayer de répertoires de synchronisation entre les serveurs (y compris tous les fichiers cachés) - par exemple, la synchronisation somedirAsur source-serverà somedirBun 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 rsynccommandes depuis le 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 devrai peut-être ajouter sudoà la commande ci-dessus).

Cela va sans dire, mais il est évident que votre utilisateur distant a également besoin d'un accès en lecture somedirAsur votre serveur source. :)

Brian Lacy
la source
Est-ce l'indicateur -e qui synchronisera le .htaccessfichier?
Jesse Burcsik
1
@JesseBurcsik Non, le -e sshspécifie la méthode de connexion.
triple
1
Vous avez juste besoin d'une barre oblique sur la source, la destination n'a pas d'importance
Jonas Stensved
28

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

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

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

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

Notez les barres obliques à la fin des chemins , comme Brian Lacy a dit que les barres obliques sont la clé. Je n'ai pas la réputation de commenter son message ou je l'aurais fait.

harleygolfguy
la source
1
Ajoutez simplement shopt -s dotglobà votre script avant la rsync
Pian0_M4n
3

Je pense que le problème est dû à l'expansion du shell wildcard. Utilisation . au lieu d'étoile.

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

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

L'expansion des caractères génériques du shell traduit la liste d'arguments que le programme rsync obtient

-av * server2::sharename/B

dans

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

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

vkraemer
la source
3

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

DonCallisto
la source