rsync не синхронизирует файл .htaccess - PullRequest
77 голосов
/ 28 января 2012

Я пытаюсь выполнить rsync для каталога A сервера1 с каталогом B для сервера 2.

Находясь в каталоге A на сервере1, я выполнил следующие команды.

rsync -av * server2::sharename/B

, но интересныйДело в том, что он синхронизирует все файлы и каталоги, кроме .htaccess или любого скрытого файла в каталоге A. Все скрытые файлы в подкаталогах синхронизируются.

Я также попробовал следующую команду:

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

но результаты совпадают.

Любые идеи, почему скрытые файлы каталога A не синхронизируются и как это исправить.Я работаю как пользователь root.

спасибо

Ответы [ 5 ]

95 голосов
/ 28 января 2012

Это связано с тем, что * по умолчанию распространяется на все файлы в текущем рабочем каталоге, кроме файлов, имя которых начинается с точки.Таким образом, rsync никогда не получает эти файлы в качестве аргументов.

Вы можете передать ., обозначающий текущий рабочий каталог, rsync:

rsync -av . server2::sharename/B

Таким образом rsync будет искатьфайлы для передачи в текущем рабочем каталоге, в отличие от поиска их в том, что * расширяется до.

В качестве альтернативы, вы можете использовать следующую команду, чтобы * развернуть все файлы, включая те, которые начинаются сточка:

shopt -s dotglob

См. также Справочная страница shopt .

44 голосов
/ 21 мая 2013

Для тех, кто просто пытается синхронизировать каталоги между серверами (включая все скрытые файлы) - например, синхронизировать somedirA на source-server до somedirB на конечном сервере - попробуйте это :

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

Обратите внимание на косую черту в конце обоих путей. Любой другой синтаксис может привести к неожиданным результатам!


Кроме того, для меня проще всего выполнять rsync команды с целевого сервера, потому что легче убедиться, что у меня есть надлежащий доступ для записи (т. Е. Мне может понадобиться добавить sudo к указанной выше команде).

Вероятно, само собой разумеется, но, очевидно, вашему удаленному пользователю также необходим доступ на чтение к somedirA на вашем исходном сервере. :)

18 голосов
/ 25 ноября 2015

У меня была такая же проблема.

Для меня, когда я выполнил следующую команду, скрытые файлы не получили rsync'ed

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

Но когда я добавил косые черты в конце путей, скрытые файлы были rsync'ed.

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

Обратите внимание на косые черты в конце путей , поскольку Брайан Лейси сказал, что косые черты являются ключом. У меня нет репутации, чтобы комментировать его пост, иначе я бы это сделал.

3 голосов
/ 28 января 2012

Я думаю, что проблема связана с расширением подстановочного знака оболочки. Используйте вместо звезды.

Рассмотрим следующий пример содержимого каталога

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

Расширение подстановочного знака оболочки преобразует список аргументов, полученный программой rsync

-av * server2::sharename/B

в

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

до начала выполнения команды.

2 голосов
/ 28 января 2012

* говорит rsynch не синхронизировать скрытые файлы. Вы не должны опускать это.

...