Motivo curto: a string ./.ignoramus
não corresponde a .ignoramus
.
Solução curta: use GLOBIGNORE=*ignoramus
(leia também detalhes no final).
$ GLOBIGNORE=*ignoramus
$ ls .* | grep ignor ### empty
$ ls ./.* | grep ignor ### also empty
O asterisco corresponderá a qualquer coisa (até mesmo uma barra /
antes do nome).
Naturalmente, isso também corresponderá a foobar.ignoramus
.
Para algumas soluções alternativas, leia no final.
Resposta expandida:
Isso também acontece com um arquivo normal:
$ mkdir /tmp/mytest; cd /tmp/mytest
$ touch f1 f2 filetotest
$ GLOBIGNORE=filetotest
$ ls -1
f1
f2
filetotest
$ ls -1 f*
f1
f2
$ ls -1 *
f1
f2
$ ls -1 ./f*
./f1
./f2
./filetotest
GLOBIGNORE não corresponderá a ./filetotest
, mas se usarmos:
$ GLOBIGNORE="*filetotest"
$ ls -1 ./f*
./f1
./f2
$ ls -1 ./*
./f1
./f2
$ ls -1
f1
f2
filetotest
O padrão em GLOBIGNORE corresponderá a (something)filetotest
.
Para o seu exemplo:
$ touch .ignoramus
$ GLOBIGNORE='*ignoramus'
ls -1a
.
..
f1
f2
filetotest
.ignoramus
$ ls .* | grep ignor
$ ls ./.* | grep ignor
Mesmo com algum caminho na frente do arquivo, funciona:
$ GLOBIGNORE='*ignoramus:*filetotest'
$ mkdir -p long/dir/to/test
$ touch long/dir/to/test/{f3,f4,.ignoramus,.other,filetotest}
$ ls -1 long/dir/to/test/f*
long/dir/to/test/f3
long/dir/to/test/f4
$ ls -1 long/dir/to/test/.[^.]*
long/dir/to/test/.other
$ shopt -s dotglob
$ ls -1 long/dir/to/test/*
long/dir/to/test/f3
long/dir/to/test/f4
long/dir/to/test/.other
$ unset GLOBIGNORE; shopt -s dotglob
$ ls -1 long/dir/to/test/*
long/dir/to/test/f3
long/dir/to/test/f4
long/dir/to/test/filetotest
long/dir/to/test/.ignoramus
long/dir/to/test/.other
Claro, isso também corresponderá a bar.ignoramus
. Se isso não for desejado, use:
$ GLOBIGNORE=.ignoramus:./.ignoramus
Ou, se você quiser algum caminho incluído:
$ GLOBIGNORE=.ignoramus:*/.ignoramus