Não faça isso. É uma péssima ideia tentar replicar o que os padrões de inclusão / exclusão de rsync fazem sem usar o rsync. O fato de alguns dos padrões poderem ser complexos é ainda mais um motivo para não tentar. Use o próprio rsync para garantir um comportamento consistente e minimizar surpresas.
Na página de manual do rsync:
--existing, --ignore-non-existing
This tells rsync to skip creating files (including directories)
that do not exist yet on the destination. If this option is
combined with the --ignore-existing option, no files will be
updated (which can be useful if all you want to do is to delete
extraneous files).
Portanto, você deve executar com --delete --delete-excluded --ignore-existing --ignore-non-existing e o rsync removerá arquivos externos e não atualizará nem removerá nenhum outro arquivo.