O motivo pelo qual seu comando não está funcionando é explicado pela página de manual do rsync (ênfase adicionada):
--delete
This tells rsync to delete extraneous files from the receiving side (ones that aren’t on the sending side), but only for the directories that are being synchronized. You must have asked rsync to send the whole directory (e.g. "dir" or "dir/") without using a wildcard for the directory’s contents (e.g. "dir/*") since the wildcard is expanded by the shell and rsync thus gets a request to transfer individual files, not the files’ parent directory. Files that are excluded from the transfer are also excluded from being deleted unless you use the --delete-excluded option or mark the rules as only matching on the sending side (see the include/exclude modifiers in the FILTER RULES section).
Assim, quando você executa
$ rsync -d --delete SRC:{*.jpg,*.txt} DEST
os arquivos indesejados em DEST não estão sendo excluídos porque você não solicitou que um diretório fosse sincronizado, mas apenas para alguns arquivos específicos. Para obter os resultados desejados, tente algo assim:
rsync -d --delete-excluded --include '*.jpg' --include '*.txt' --exclude '*' SRC/ DEST/
Observe que a ordem das diretivas de inclusão e exclusão é importante. Essencialmente, cada arquivo é verificado em relação aos padrões de inclusão ou exclusão na ordem em que aparecem. Assim, os arquivos com extensões .jpg ou .txt são sincronizados, pois correspondem aos padrões "incluídos" antes de corresponderem ao padrão "*" excluído. Tudo o resto é excluído pelo padrão --exclude '*'
. A opção --delete-excluded
garante que até mesmo os arquivos excluídos no lado DEST sejam excluídos.