rsync - inclui arquivos de nível superior e exclui diretórios

0

Eu quero incluir todos os arquivos de nível superior ( file1.txt , file2 ) e somente qualquer coisa abaixo de /top/dir1/ . Como posso conseguir isso?

Eu tentei o seguinte, mas eles não funcionam

$ tree
.
└── from
    ├── file1.txt
    ├── file2
    └── top
        ├── dir1
        │   └── file3.txt
        └── dir2
            └── file4.txt

uma tentativa, falta de arquivos de nível superior

$ rsync --dry-run \
>       --include='top/' \
>       --include='top/dir1/' \
>       --include='top/dir1/***' \
>       --exclude='top/*' \
>       --exclude="*" \
>       -av from/* .
building file list ... done
top/
top/dir1/
top/dir1/file3.txt

outra tentativa de incluir arquivos de nível superior, mas não exclui dir2

$ rsync --dry-run \
>       --include="*" \
>       --include='top/' \
>       --include='top/dir1/' \
>       --include='top/dir1/***' \
>       --exclude='top/*' \
>       --exclude="*" \
>       -av from/* .
building file list ... done
file1.txt
file2
top/
top/dir1/
top/dir1/file3.txt
top/dir2/
top/dir2/file4.txt
    
por Stephane 05.01.2017 / 01:45

1 resposta

2

Nunca use * no caminho de origem do rsync, o rsync é perfeitamente capaz de encontrar essas entradas em si.

Ao fazer isso, você efetivamente chamou o rsync de

rsync --dry-run \
   --include="*" \
   --include='top/' \
   --include='top/dir1/' \
   --include='top/dir1/***' \
   --exclude='top/*' \
   --exclude="*" \
   -av from/file1.txt from/file2 from/top .

Os padrões de inclusão e exclusão são relativos à raiz de origem; então os padrões --include 'top/' etc. nunca serão iguais.

Faça isso:

rsync --dry-run \
   --include="/*" \
   --include='/top/' \
   --include='/top/dir1/' \
   --include='/top/dir1/***' \
   --exclude='/top/*' \
   --exclude="*" \
   -av from/ .
    
por 05.01.2017 / 14:13

Tags