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 1para restringir somente aos diretórios especificados, sem recursionar para subdiretórios -
-type fpara listar apenas arquivos regulares -
-print0para delimitar a saída usando caracteres ASCII NUL (%code%)