rsync не синхронізує файл .htaccess


91

Я намагаюся rsync каталог A сервера1 з каталогом B сервера2.

Сидячи в каталозі A сервера1, я виконав наступні команди.

rsync -av * server2::sharename/B

але цікаво те, що він синхронізує всі файли та каталоги, крім .htaccess або будь-якого прихованого файлу в каталозі А. Будь-які приховані файли в підкаталогах синхронізуються.

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

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

але результати однакові.

Будь-які ідеї, чому приховані файли каталогу не синхронізуються, і як це виправити. Я працюю від імені користувача root.

Дякую


1
Я вас влаштовую однією відповіддю, ви повинні прийняти її: meta.stackexchange.com/questions/5234/…
Kutzi

Відповіді:


109

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

Ви можете передати .позначення поточного робочого каталогу rsync:

rsync -av . server2::sharename/B

Цей спосіб rsyncбуде шукати файли для передачі в поточному робочому каталозі, на відміну від пошуку в тому, що *розширюється до.

Крім того, ви можете використовувати наступну команду для *розширення до всіх файлів, включаючи ті, що починаються з крапки:

shopt -s dotglob

Див. Також покуповану сторінку .


7
Дійсно '.' вирішує проблему, наприклад, rsync -avz user@domain.com:/remote/path/. /destination/pathвиконує роботу
Маріуш Новак

56

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

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

Зверніть увагу на скісні риски в кінці обох контурів. Будь-який інший синтаксис може призвести до несподіваних результатів!


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

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


Чи прапорець -e синхронізував .htaccessфайл?
Jesse Burcsik

1
@JesseBurcsik Ні, -e sshвказує спосіб підключення.
триплеє

1
Вам просто потрібна коса риса на джерелі, пункт призначення не має значення
Йонас Стеншвед

28

У мене була та сама проблема.

Для мене, коли я виконував наступну команду, приховані файли не отримували rsync'ed

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

Але коли я додав скісні риски в кінці шляхів, приховані файли були rsync'ed.

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

Зверніть увагу на скісні риски в кінці контурів , оскільки Брайан Лейсі сказав, що скісні риски є ключовими. У мене немає репутації коментувати його допис, інакше я б це зробив.


1
Просто додайте shopt -s dotglobдо свого сценарію перед rsync
Pian0_M4n

3

Я думаю, що проблема пов’язана з розширенням шаблону оболонки. Використовуйте. замість зірки.

Розглянемо наступний приклад вмісту каталогу

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

Розширення підстановки оболонки переводить список аргументів, з якого отримує програма rsync

-av * server2::sharename/B

into

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

before the command starts getting executed.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.