Se você não se importar em usar outro comando para fazer a filtragem, você pode usar alguns comandos GNU find
:
(cd from; find . -mindepth 1 -type f -print0; find ./top/dir1 -print0;) |
rsync -av --from0 --files-from=- from/ to
Em man rsync
:
--files-from=FILE read list of source-file names from FILE
-0, --from0 all *from/filter files are delimited by 0s
rsync
pode aceitar uma lista de arquivos para sincronizar de outro arquivo (ou entrada padrão -
), mas os caminhos devem ser relativos (ou devemos usar --no-R
para permitir caminhos absolutos). Portanto, primeiro cd
para o diretório de origem, execute find
com as opções apropriadas:
-
-mindepth 1
para restringir somente aos diretórios especificados, sem recursionar para subdiretórios -
-type f
para listar apenas arquivos regulares -
-print0
para delimitar a saída usando caracteres ASCII NUL (%code%
)