rsync: как исключить верхний каталог

14

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

Команда rsync, которую я использую, выглядит следующим образом:

rsync --exclude ./ -rlptDu ./ server.example.com:/usr/local/directory/

и server.example.com:/usr/local/directory/выглядит так:

drwxrws---  5 root   staff 24576 Jul  9 15:00 .

(мой локальный пользователь является членом staff)

Когда я запускаю rsync, я получаю следующую ошибку:

rsync: failed to set times on "/usr/local/directory/.": Operation not permitted (1)
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1070) [sender=3.0.9]
make: *** [pub_to_mel_internal] Error 23

Это версия 3.0.9 на локальной машине и 3.0.7 на удаленной, обе машины работают под управлением Debian.

Стив Померой
источник
Вы знакомы с синтаксисом в этом примере: wirepeed.xs4all.nl/mediawiki/index.php/… Это позволяет вам включать определенные файлы / каталоги из исключенного каталога. Возможно, вам придется использовать исключающий файл.
Джиппи
Да. Проблема в том, что я не могу убедить его исключить каталог верхнего уровня (в частности). У меня не было проблем со смешиванием включений / исключений в прошлом, просто кажется, что верхний уровень - это особый случай.
Стив Померой

Ответы:

8

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

rsync -rlptDu -- * server.example.com:/usr/local/directory/

Добавьте .[!.]*после, *если у вас есть точечные файлы в верхнем каталоге, и ..?*если у вас есть имена файлов, начинающиеся с двух точек.

Жиль "ТАК - перестань быть злым"
источник
2
Круто, спасибо! Это работает. Единственным недостатком этой техники является то, что она требует оболочки для выбора всех файлов. Если у вас есть тонны файлов в каталоге (чего у меня нет в моем случае), он может подавиться. Возможно, это можно исправить с помощью xargs (хотя и не с опциями --delete).
Стив Померой
Одна проблема, с которой я столкнулся, *заключалась в том, что --deleteфайлы не были удалены, поскольку они не были частью поиска.
thomasa88
@ thomasa88 Пожалуйста, посмотрите этот ответ .
Камиль Мачоровский