rsync включает только шаблон каталога - PullRequest
0 голосов
/ 15 сентября 2018

Я хочу включить только каталоги с именем *cache* и все файлы и подкаталоги в них.
Как написать rync --include --exclude?

        source                          dest        
        ├── a                           │   
        ├── b                           ├── b   
        │   └── d                       │   └── d       
        │       └── e                   │       └── e           
        │           └── cache           │           └── cache                   
        ├── c                           ├── c   
        │   └── f                       │   └── f       
        │       └── npm_cache           │       └── npm_cache                   
        ├── g                           ├── g   
        │   └── cache_stores            │   └── cache_stores                    
        ├── h                           ├── h   
        │   └── cache                   │   └── cache           
        │       └── i                   │       └── i           
        │           └── j               │           └── j               
        └── k                           │   
            └── l                       │       

Ответы [ 2 ]

0 голосов
/ 20 сентября 2018

Я принял ответ ams, но если вы не знаете синтаксис rsync --include --exclude (не знаю), сначала получите явный список файлов с find.

cd source
find . | grep /.*cache.*/ | rsync --files-from=- source dest
0 голосов
/ 19 сентября 2018

Это должно работать:

--include='*/'
--include='*cache*/**'
--exclude='*'
--prune-empty-dirs

То есть:

  • Включить все папки (это необходимо для поиска внутри них).
  • Включить все файлыс «cache» в имени родительского каталога.
  • Исключить все остальное.
  • Удалите все папки, которые были скопированы, но оказалось, что не содержат кешей.К сожалению, это также удаляет все пустые папки в каталогах кеша, но, надеюсь, это не важно для вас.
...