題 Rsync僅限某些目錄,並且只包含其中的某些子目錄


/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/ 目錄,只放置的內容 archive/ 成 dest/

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

2
2017-07-13 07:51


起源




答案:


主要問題是,當rsync以遞歸方式下降到文件夾層次結構時,它只會輸入與其過濾規則匹配的目錄。所以,在你的第一個例子中,rsync永遠不會到達 lastSuccessful 目錄,因為規則排除了它上面的目錄!

相反,你需要做這樣的事情:

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

2
2017-07-13 08:52