Спасибо bjanssen за то, что он указал на extglob shopt
от bash, который позволяет этот вид сглаживания.
Из справочной страницы bash
:
If the extglob shell option is enabled using the shopt builtin, several
extended pattern matching operators are recognized. In the following
description, a pattern-list is a list of one or more patterns separated
by a |. Composite patterns may be formed using one or more of the following
sub-patterns:
?(pattern-list)
Matches zero or one occurrence of the given patterns
*(pattern-list)
Matches zero or more occurrences of the given patterns
+(pattern-list)
Matches one or more occurrences of the given patterns
@(pattern-list)
Matches one of the given patterns
!(pattern-list)
Matches anything except one of the given patterns
Итак, чтобы ответить на мой вопрос "как указать все файлы, которые не соответствуют * ~ ":
!(*~)
или без необходимости в extglob
:
*[^~]
И в целом, отвечая на последнюю часть моего вопроса:
The GLOBIGNORE shell variable may be used to restrict the set of file names
matching a pattern. If GLOBIGNORE is set, each matching file name that also
matches one of the (colon-separated) patterns in GLOBIGNORE is removed from
the list of matches.