rsync копіювання вмісту каталогів не рекурсивно


8

Я намагаюся нерекурсивно копіювати вміст серії каталогів в іншу віддалену систему.

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

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

Я намагався:

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

Але вони не роблять того, що я хочу.

Відповіді:


20

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

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

Пояснення:

  • -aзапускає режим архіву, який активує як рекурсію, так і збереження "символічних посилань, пристроїв, атрибутів, дозволів, прав власності тощо", згідно man rsync.
  • -fскорочено --filter=, що додає правило фільтрації файлів.
    • Шаблон знаходиться всередині одинарних лапок, щоб оболонка не розширювала символи; подвійні котирування спрацювали б однаково добре в цьому випадку.
    • - означає, що це схема виключення.
    • Провідний /означає, що шаблон повинен починатися з dirA/(rsync "передача-корінь").
    • */*Частина малюнка відноситься ні до чого всередині піддиректорії.
    • Запис /обмежує виключення до каталогів. Файли всередині підкаталогу dirA/не впливають.

Отже, врешті-решт, rsync копіює не більше ніж один рівень вниз (а також не створює каталоги другого рівня).


2
Дуже хороший! Мені вдалося -f '- /*/'обмежитися лише файлами верхнього рівня. Я також повинен був вказати, -f '- .*'щоб виключити файли точок, оскільки я синхронізував домашній каталог.
haridsv

5

Наведене вище рішення (від PleaseStand) чомусь не працювало для мене. Це працювало, хоча:

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

Існує також така альтернатива:

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


1

Однією з "особливостей" rsync є те, як розбираються каталоги.

rsync /dirA/ host:/dirB/ і rsync /dirA host:/dirB теоретично має бути рівнозначним.

Як не хочеться заохочувати рекурсивність, ви хочете уникати -r, -aщо крім інших речей має на увазі -r.

Я все ще не зовсім займаюся дослідженнями, але це моя вихідна відповідь.

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