Em vez de usar rm, pode ser mais fácil usar encontrar . Um comando como este excluiria tudo, exceto um arquivo chamado exatamente 'arquivo'
find . \! -name 'file' -delete
Muitas versões devem ser compatíveis com globbing e correspondência de expressões regulares.
Você também pode enviar a saída de find para rm também
find . \! -name '*pattern*' -print0 | xargs --null rm