Rsync apenas alguns diretórios e apenas certos subdiretórios dentro deles

2

Em /opt , tenho muitos diretórios diferentes, alguns dos quais contêm _pkg_linux_deb_ ou _pkg_android_apk_ no meio do nome deles. Esses diretórios também contêm muitos subdiretórios, um dos quais é lastSuccessful , que por sua vez contém archive como seu próprio subdiretório. Eu quero que os arquivos desses subdiretórios archive sejam rsync'ed, mantendo toda a estrutura de diretórios, por exemplo, foo_pkg_linux_deb_bar/lastSuccessful/archive/dir1/dir2/dirN/foo.ext

Aqui está a regra que eu criei, mas parece que não funciona:

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

O seguinte usa a expansão do bash e funciona, mas o destino não contém toda a estrutura do diretório, está faltando *{_pkg_linux_deb_,_pkg_android_apk_}*/lastSuccessful/archive/ diretórios, colocando apenas o conteúdo de archive/ em dest/

rsync -rnvm /opt/*{_pkg_linux_deb_,_pkg_android_apk_}*/lastSuccessful/archive/ dest/
    
por BananaBlender 13.07.2016 / 09:51

1 resposta

2

O principal problema é que, quando o rsync desce recursivamente através de uma hierarquia de pastas, ele apenas entra em diretórios que correspondem às regras de filtragem. Então, no seu primeiro exemplo, o rsync nunca chega a um diretório lastSuccessful , já que a regra exclui o diretório acima dele!

Em vez disso, você precisa fazer algo assim:

rsync -rnvm --include='/*_pkg_linux_deb_*/' --include='/*_pkg_android_apk_*/' --include='lastSuccessful/' --include='archive/***' --exclude='*' /opt/ dest/
    
por 13.07.2016 / 10:52

Tags