Na longa descrição das muitas variantes de como incluir e excluir arquivos, parece haver uma frase mais importante:
Um determinado arquivo é excluído pelo sistema de seleção de arquivos exatamente quando a primeira condição de seleção de arquivo correspondente especifica que o arquivo seja excluído.
De acordo com isso, você precisa de uma opção de inclusão para os arquivos que deseja primeiro, para que eles sejam correspondidos e a primeira correspondência não possa mais ser uma exclusão. O, tem uma opção de exclusão para combinar tudo. Os arquivos correspondidos antes não serão afetados, mas todo o resto é excluído agora:
duplicity ... --include "**/*/*.txt" --exclude "**/*" src dest
Para o seu exemplo, isso seria
duplicity /source-path --include "**/*/*.txt" --include "**/*/*.xml" --exclude "**/*" /dest-path
Para entender quais arquivos são correspondidos, é possível usar execuções a seco, sem alterar nada, com o registro em log para listar os arquivos correspondentes:
duplicity --dry-run --no-encryption -v info --include ... --exclude ... src dest
De man duplicity
:
FILE SELECTION
duplicity accepts the same file selection options rdiff-backup does,
including --exclude, --exclude-filelist-stdin, etc.
When duplicity is run, it searches through the given source directory
and backs up all the files specified by the file selection system. The
file selection system comprises a number of file selection conditions,
which are set using one of the following command line options:
--exclude
[ ... ]
--include-regexp
Each file selection condition either matches or doesn't match a given
file. A given file is excluded by the file selection system exactly
when the first matching file selection condition specifies that the
file be excluded; otherwise the file is included.