다음 디렉터리 구조가 있습니다.
~/tmp/globstar ɀ find dir -type f dir/file.ext dir/subdir1/file.ext dir/subdir2/file.ext
그리고 globstar
옵션이 Bash에서 활성화되어 있습니다. 다음과 같이 말할 수 있습니다.
~/tmp/globstar ɀ ls -1 dir/**/*.ext dir/subdir1/file.ext dir/subdir2/file.ext
제 질문은 다음과 같습니다. dir/file.ext
이 목록에서 제외 되었습니까?
배시 설명서 에 globstar
:
설정된 경우 파일 이름 확장 컨텍스트에 사용되는 패턴 **는 모든 파일과 0 개 이상의 디렉토리 및 하위 디렉토리와 일치합니다. 패턴 뒤에 /가 있으면 디렉터리와 하위 디렉터리 만 일치합니다.
“ 0 이 단락의 ”는 dir/file.ext
가 포함되어야한다는 인상을줍니다. 뭔가 빠진 게 없다면.
댓글
답변
하위 디렉토리 수준 만 참조하는 것 같습니다. . **
/
일치
-
모든 파일 및 디렉토리
-
0 개 이상의 하위 디렉토리
하지만 완전히 사라지지는 않습니다. **/
는 **
가 적용되는 최상위 디렉토리의 파일이 일치하지 않음을 의미합니다.
dir/*.ext dir/**/*.ext
.
댓글
- 예, 제 폴백입니다. 예쁘지 않습니다. 😉
Answer
이것은 나열된 배포판과 함께 제공되는 Bash 버전에서 예상대로 작동합니다. :
- 4.1.2 (1) — CentOS 6.5
- 4.1.5 (1) — Debian 6.0.10
- 4.1.10 (4 ) — Cygwin 1.7.31
- 4.2.46 (1) — CentOS 7.1
- 4.3.11 (1) — Ubuntu 14.04.1
- 4.3.30 (1) — Debian 8.1
사실 위에 나열된 버전은 제가 테스트 한 모든 버전입니다. 즉, 작동하지 않는 Bash 버전 4를 찾지 못했습니다. 옵션 globstar
가 Bash 4.0에 추가되었습니다. 변경 사항 을 참조하세요. 이전 버전에서는 shopt -s globstar
명령이 오류를 반환해야합니다.
테스트
1 . dir/**/*.ext
는 dir/file.ext
:
2. **/*.ext
는
:
~/tests$ cd dir ~/tests/dir$ ls -1 **/*.ext file.ext subdir1/file.ext subdir2/file.ext
환경 준비 위 테스트 재현 :
mkdir -p dir/subdir{1,2} touch dir/{,subdir{1,2}/}file.ext shopt -s globstar
댓글
- 올바른 대답. OP에서
shopt -s globstar
설정을 잊었습니다.
답변
I globstar가 꺼져 있거나 꺼진 것처럼 보입니다. 다음과 같이 켤 수 있습니다.
shopt -s globstar
0 개의 하위 디렉터리와 일치하지 않을뿐만 아니라 두 개의 하위 디렉터리와도 일치하지 않습니다.
$ find dir -type f #the same as yours except with a directory inside one of the subdirectories dir/file.ext dir/subdir1/file.ext dir/subdir1/subsubdir/file.ext dir/subdir2/file.ext $ shopt -u globstar #turn globstar off $ #will only show files in subdirectories $ #will not show files in dir or in subsubdir $ echo dir/**/*.ext dir/subdir1/file.ext dir/subdir2/file.ext $ shopt -s globstar #turn globstar on $ #will show all four files $ echo dir/**/*.ext dir/file.ext dir/subdir1/file.ext dir/subdir1/subsubdir/file.ext dir/subdir2/file.ext
globstar를 끄면 **는 *처럼 작동하므로 dir/**/*.ext
는
$ echo dir/*/*.ext dir/subdir1/file.ext dir/subdir2/file.ext
때로는 globstar가 켜져 있다고 생각하도록 속이는 경우
현재 globstar 설정을 다음과 같이 확인하세요. 이 :
shopt | grep globstar
댓글
-
.
ɀ
?unicode ɀ
또는 Wikipediaɀ
는 여기에서 프롬프트를 구분하는 데 사용되는 문자입니다. 일부 사용자는$
대신£
또는€
문자를 선호합니다. 🙂 원래는ɀ
특수 아프리카 언어 표기법을 위해 만들어진 ' z ' 문자입니다. )