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

91

Я пытаюсь выполнить rsync каталог A на server1 с каталогом B на server2.

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

rsync -av * server2::sharename/B

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

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

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

но результаты те же.

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

Благодарность

Хладнокровие
источник
1
Я вас удовлетворен одним ответом, вы должны принять его: meta.stackexchange.com/questions/5234/…
Kutzi

Ответы:

109

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

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

rsync -av . server2::sharename/B

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

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

shopt -s dotglob

См. Также man-страницу shopt .

Адам Зальцман
источник
7
На самом деле '.' решает проблему, например, rsync -avz user@domain.com:/remote/path/. /destination/pathвыполняет свою работу
Мариуш Новак
57

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

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

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


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

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

Брайан Лейси
источник
Был ли .htaccessфайл синхронизирован с флагом -e ?
Джесси Бурчик 01
1
@JesseBurcsik Нет, -e sshуказывает способ подключения.
tripleee
1
Вам просто нужна косая черта в источнике, пункт назначения не имеет значения,
Йонас Стенсвед,
28

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

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

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

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

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

в

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

до того, как команда начнет выполняться.

вкраемер
источник
3

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

ДонКаллисто
источник