Se você quiser usar globbing (nem sempre é uma boa ideia), você pode usar:
$ ls -d !(*[qQ]*)
ou com shopt -s nocaseglob
:
$ shopt -s nocaseglob
$ ls -d !(*q*)
A opção -d
para não listar o conteúdo dos diretórios correspondentes.
Para que isso funcione, você deve ter extglob
set, provavelmente é o caso por padrão. Se não, shopt -s extglob
fará.
Uma abordagem melhor seria usar find , pois você poderá -exec
algumas coisas nos arquivos correspondentes se precisar (renomear, grep , editar, etc ...), e você terá um controle muito melhor sobre o que você precisa combinar. Um exemplo:
$ find . -maxdepth 1 \! -iname '*q*' -type f
Isto irá encontrar todos os arquivos ( -type f
) no diretório atual ( .
) não em subdiretórios ( -maxdepth 1
) que não ( \!
) tem um q ou um Q em seu nome ( -iname '*q*'
).
Se você tem um grande número de arquivos, encontrar é melhor e mais rápido do que o Bash , e não transbordará o número máximo de argumentos.
Espero que isso ajude!