Rsync лише певні каталоги та лише певні підкаталоги всередині них


2

У /optмене є багато різних каталогів, деякі з яких містять _pkg_linux_deb_або _pkg_android_apk_в середині їх назви. Ці каталоги також містять багато підкаталогів, один з lastSuccessfulяких у свою чергу містить archiveяк власний підкаталог. Я хочу, щоб файли з цих archiveпідкаталогів були rsync'ed, зберігаючи всю структуру каталогів, наприкладfoo_pkg_linux_deb_bar/lastSuccessful/archive/dir1/dir2/dirN/foo.ext

Ось правило, яке я придумав, але воно, схоже, не працює:

rsync -rnvm --include='/*(_pkg_linux_deb_|_pkg_android_apk_)*/lastSuccessful/archive/***' --exclude='*' /opt/ dest/

Наступні використовує розширення Баша і він працює, але адресат не містить всю структуру каталогів, то не вистачає *{_pkg_linux_deb_,_pkg_android_apk_}*/lastSuccessful/archive/каталоги, розміщуючи тільки вміст archive/вdest/

rsync -rnvm /opt/*{_pkg_linux_deb_,_pkg_android_apk_}*/lastSuccessful/archive/ dest/

Відповіді:


2

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

Натомість вам потрібно зробити щось подібне:

rsync -rnvm --include='/*_pkg_linux_deb_*/' --include='/*_pkg_android_apk_*/' --include='lastSuccessful/' --include='archive/***' --exclude='*' /opt/ dest/
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.