[0-9]
corresponde a qualquer dígito, então *[0-9]*
corresponde a qualquer string que tenha pelo menos um dígito.
[^0-9]
corresponde ao caractere que não é um dígito, portanto *[^0-9]*
corresponde a qualquer string que tenha pelo menos um não dígito.
file1.txt
tem dígitos e não dígitos, portanto, corresponde aos dois padrões.
Com padrões regulares de nome de arquivo, não há como usar um único padrão para corresponder a uma string que não contenha um caractere ou caracteres específicos.
Por outro lado, com expressões regulares, ^[^0-9]+$
corresponderia às cadeias que são feitas inteiramente de não dígitos, assim como o glob% estendido+([^0-9])
no Bash ou no ksh. (precisa de shopt -s extglob
no Bash.)