Rsync, за винятком папок .svn та їх підмісту?


10

Має справу з підривною репо і новим користувачем, який не зовсім зрозумів, як це працює.

Довгий короткий сюжет, оскільки їх локальна структура була зіпсована через копіювання випадкових папок .svn, я зробив наступне:

  • скопіював локальну структуру в папку під назвою staging
  • рекурсивно видалено всі .svn папки з каталогу інсценізації
  • перевірив репо в "чисту папку"

Тепер ми перебуваємо на останньому кроці - отримуємо вміст папки інсценізації, щоб перезаписати чистий вміст.

Мені потрібно мати команду, скопіювавши вміст каталогу постановок у чистий каталог, видаливши все, що є лише в чистому каталозі, АЛЕ залишити папки .svn чистої папки в такт.

Це звучить як робота для rsync. Чи була б така команда правильною?

rsync -avr --exclude=.svn* [staging] [clean]

6
Ви завжди можете запустити rsyncз --dry-runможливістю дізнатися!
Тім

Ха-ха, дякую! І гадки не мав, що варіант існує. Треба було б уважніше прочитати людину!
SeanKilleen

Відповіді:


31

-CВаріант для Rsync може бути те , що ви хочете.

Не дозволяйте, однак, короткий опис на сторінці чоловіка вас обдурить. Здавалося б, ця опція стосується лише CVS, але залежно від вашої версії rsync вона пропускатиме файли майже кожної існуючої загальної системи контролю версій.

# rsync version: 3.0.7

-C, --cvs-exclude           auto-ignore files in the same way CVS does

...

          The exclude list is initialized to exclude the  following  items
          (these  initial  items are marked as perishable — see the FILTER
          RULES section):

                 RCS  SCCS  CVS  CVS.adm   RCSLOG   cvslog.*   tags   TAGS
                 .make.state  .nse_depinfo *~ #* .#* ,* _$* *$ *.old *.bak
                 *.BAK *.orig *.rej .del-* *.a *.olb *.o *.obj *.so  *.exe
                 *.Z *.elc *.ln core .svn/ .git/ .bzr/

          then,  files  listed in a $HOME/.cvsignore are added to the list
          and any files listed in the CVSIGNORE environment variable  (all
          cvsignore names are delimited by whitespace).

2
Будьте дуже обережні, тому що ці розширення можуть використовуватися для файлів, які ви хочете скопіювати, наприклад. *.aпризначено для статичних бібліотек iOS.
Макс Чукімія

Файли NB та каталоги виключені: жодна папка під назвою "core" не копіюється, наприклад, / myproj / api / / myproj / core / <- не створюється резервна копія!
текнопаул

7

Майже - так має бути

rsync -av --exclude='.svn*' [staging] [clean]

або будь-яка інша форма котирування, яка не дозволяє шкаралупі розширювати підстановку. (Підстановочний знак відповідатиме лише маловірогідному файлу, з якого починається ім'я --exclude=.svn, але краще не ризикувати, а також працювати правильно, навіть якщо оболонка налаштована заглушити невідповідні символи або розширити їх у порожній список. )

-rвже включено до -a. Додатковий rпросто зайвий, він не принесе шкоди.

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

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

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