O padrão !("file1" | "file2") corresponde a qualquer arquivo, exceto file1␣ ou ␣file2 , em que ␣ é um espaço. A maneira como você citou é enganosa: é equivalente a !(file1 | file2) ou !("file1 "|" file2 ) '.
Não há como bash combinar um padrão negativo com um padrão positivo para dizer "todos esses, exceto aqueles". Em zsh, você pode escrever
setopt extended_glob
rm /path/to/directory/*.(mp4|zip)~(keep*|1234.zip)
para remover this.mp4 e that.zip , mas não keep-this.mp4 ou 1234.zip .
No bash, você pode definir a GLOBIGNORE variable para excluir certos padrões de todos os jogos.
shopt -s extglob
GLOBIGNORE='keep*:1234.zip'
rm /path/to/directory/*.(mp4|zip)
unset GLOBIGNORE
Como alternativa, você pode usar find , que permite criar expressões booleanas arbitrariamente complexas.
find /path/to/directory \( -name '*.mp4' -o -name '*.zip' \) ! -name 'keep*' ! -name '1234.zip' -delete
Observe que find recorre a subdiretórios. Se isso não for desejado, adicione -maxdepth 1 após /path/to/directory .
Se o seu find não entender -maxdepth (é comum, mas não padrão), use -type d -prune -o . Se seu find não entender -delete (mesmo comentário), use -exec rm {} + .