2

В /opt меня есть много разных каталогов, некоторые из которых содержат _pkg_linux_deb_ или _pkg_android_apk_ в середине их имени. Эти каталоги также содержат много подкаталогов, один из которых является lastSuccessful который, в свою очередь, содержит archive качестве своего собственного подкаталога. Я хочу, чтобы файлы из этих archive подкаталогов были rsync'ами, сохраняя всю структуру каталогов, например, 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/

Далее используется расширение bash, и оно работает, но место назначения не содержит всей структуры каталогов, оно отсутствует *{_pkg_linux_deb_,_pkg_android_apk_}*/lastSuccessful/archive/ directory, помещая только содержимое archive/ в dest/

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

1 ответ1

2

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

Вместо этого вам нужно сделать что-то вроде этого:

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

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