현재 디렉터리에 빈 파일 .ignoramus가 있습니다.
bojan@localhost:~$ echo $GLOBIGNORE
.ignoramus
bojan@localhost:~$ ls .* | grep ignor
bojan@localhost:~$ ls ./.* | grep ignor
./.ignoramus
사용된 도구 ls(GNU coreutils) 8.23 GNU bash, 버전 4.3.42(1)-릴리스(x86_64-pc-linux-gnu)
답변1
이 설정은 명령줄에서 와일드카드 문자를 확장할 때 $GLOBIGNORE
쉘에 의해 처리됩니다 . 첫 번째 경우, 쉘은 먼저 .*
로 확장됩니다 .ignoramus
. 이는 일치하므로 $GLOBIGNORE
에 전달된 이름에 포함되지 않습니다 ls
.
두 번째 경우에는 쉘이 다음 ./.*
으로 확장됩니다../.ignoramus
아니요$GLOBIGNORE
로 설정하면 $GLOBIGNORE
두 .ignoramus:./.ignoramus
번째 명령의 동작이 첫 번째 명령과 일치합니다 .
답변2
간단한 이유: 문자열 ./.ignoramus
불일치 .ignoramus
.
간단한 해결책: 사용 GLOBIGNORE=*ignoramus
(마지막 세부정보 참조).
$ GLOBIGNORE=*ignoramus
$ ls .* | grep ignor ### empty
$ ls ./.* | grep ignor ### also empty
/
별표는 무엇이든 일치합니다(이름 앞의 슬래시도 포함).
물론 이것도 일치합니다 foobar.ignoramus
. 몇 가지 해결 방법은 끝부분을 참조하세요.
자세한 답변:
이는 일반 파일에서도 발생합니다.
$ 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는 일치하지 않지만 ./filetotest
다음을 사용하는 경우:
$ GLOBIGNORE="*filetotest"
$ ls -1 ./f*
./f1
./f2
$ ls -1 ./*
./f1
./f2
$ ls -1
f1
f2
filetotest
GLOBIGNORE의 패턴은 (something)filetotest
.
귀하의 예를 들어:
$ touch .ignoramus
$ GLOBIGNORE='*ignoramus'
ls -1a
.
..
f1
f2
filetotest
.ignoramus
$ ls .* | grep ignor
$ ls ./.* | grep ignor
파일 앞에 일부 경로가 있는 경우에도 작동합니다.
$ 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
물론 이것도 일치합니다 bar.ignoramus
. 필요하지 않은 경우 다음을 사용하십시오.
$ GLOBIGNORE=.ignoramus:./.ignoramus
또는 임의의 경로를 포함하려는 경우:
$ GLOBIGNORE=.ignoramus:*/.ignoramus