8

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

/dirA/dir1/file
/dirA/dir2/file
/dirA/dir3/file

dir1, dir2 и dir3 содержат много каталогов, которые я не хочу копировать. Скопируйте на удаленном хосте в /dirB, сохраняя ту же структуру каталогов.

Я старался:

rsync /dirA/*/ host:/dirB/
rsync /dirA/   host:/dirB/

Но они не делают то, что я хочу.

3 ответа3

19

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

rsync -a -f '- /*/*/' /dirA/ host:/dirB/

Объяснение:

  • -a запускает режим архивации, который активирует как рекурсию, так и сохранение «символических ссылок, устройств, атрибутов, разрешений, владельцев и т. д.», согласно man rsync.
  • -f это сокращение от --filter= , которое добавляет правило фильтрации файлов.
    • Шаблон находится внутри одинарных кавычек, поэтому оболочка не расширяет подстановочные знаки; двойные кавычки работали бы одинаково хорошо в этом случае.
    • - означает, что это шаблон исключения.
    • Начальный / означает, что шаблон должен начинаться с dirA/ (rsync " Transfer -root").
    • Часть шаблона */* относится к чему-либо внутри подкаталога.
    • Трейлинг / ограничивает исключение каталогами. Файлы внутри подкаталога dirA/ не затрагиваются.

Таким образом, в конце концов, rsync копирует только один уровень вниз (а также не создает каталоги второго уровня).

4

Решение выше (от PleaseStand) не работает для меня по некоторым причинам. Это сработало, хотя:

rsync -avc --no-r ./source/* ./destination/

Есть также этот альтернативный вариант:

rsync -avc --exclude "/" ./source/ ./destination/

0

Одна из "особенностей" rsync - это то, как анализируются каталоги.

rsync /dirA/ host:/dirB/ и rsync /dirA host:/dirB теоретически должны быть эквивалентны.

Не желая поощрять рекурсивность, вы хотите избежать -r , -a что в дополнение к другим вещам подразумевает -r .

Я еще не совсем закончил исследование, но это мой начальный ответ.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .