본문 바로가기
목차
CE

glob 이란?

by ds31x 2025. 10. 4.
728x90
반응형

정의

glob은 파일 이름과 경로를 간단한 와일드카드 패턴으로 매칭하는 방식을 가리킴.

 

Bash, zsh 등의 shell 과 여러 프로그래밍 언어(Python의 glob 모듈 등)에서 폴더 내 파일을 찾거나 일괄 처리할 때 애용됨.

Regular Expression(정규 표현식)과 비슷한 점이 있으나, file system에서 file 및 directory를 매칭하는 용도 한정으로 사용되며 때문에 보다 단순한 편임.

  • Regular Expression 은 아님: 훨씬 단순한 패턴 매칭으로 file system에서 필요한 기능 위주로 구성.
  • 운영체제의 파일 시스템 규칙과 shell expansion(셸 확장)에 의존적.

“glob” 이라는 이름은
초기 유닉스에서 와일드카드가 들어간 파일 경로를
한꺼번에(전역적으로) 확장해 주던 유틸리티 이름에서 유래됨.
해당 유틸리티에서 “global”의 약칭으로 쓰였고,
이 기능을 수행하는 동작을 “globbing”이라고 부르게 된 것임.


 

참고: shell expansion 이란?

Shell expansion은 명령 실행 전에 쉘이 메타문자, 변수, 패턴 등을 실제 문자열로 변환하는 과정임.

  • 명령어에 해당하는 프로그램이 실행되기 전에 shell이 처리함.
  • globbing, tilde expansion, variable expansion,  command substitution, arithmetic expansion, brace expansion등이 대표적임.

자주 쓰는 패턴

  • *: 임의의 문자 0개 이상.
    • 예)* .txt => 모든 txt 파일
  • ?: 임의의 문자 1개.
    • 예) file?.log => file1.log, fileA.log
  • [abc]: 대괄호 안 문자 중 하나. bracket expression 또는 character class라고 불림.
    • 예) file[12].csv => file1.csv, file2.csv
  • [a-z]: 문자 범위. 
    • 예) img_[a-f].png
  • {a,b}: 선택 집합(shell의 brace expansion으로 shell에서만 지원이 일반적).
    • 예) {jpg,png} => jpg 또는 png
    • 이는 엄격하게는 globbing이 아니고, shell에서 수행되는 brace expansion임.
    • bash, zsh 와 같은 shell이 명령어를 수행하기 전에 순수하게 문자열 수준에서 확장되는 것임.
    • cmd.exe와 powershell에선 지원하지 않음.
  • **: 디렉터리 재귀(셸/도구 설정에 따라 다름).
    • 예)**/*.md => 모든 하위 폴더의 md 파일

예시

  • Bash:
    • mv *.jpg images/ => 현재 폴더의 jpg 모두 이동
    • grep -n "TODO" **/*.py => 모든 현재 디렉토리의 하위 폴더의 파이썬 파일내에서 TODO 문자열 검색
      • Bash에선 shopt -s globstar 로 해당 옵션을 켜야 동작.
      • zsh에선 기본으로 지원.
      • shopt globstar 를 통해 해당 옵션이 활성화되었는지 확인 가능함. (shopt -s : 활성화된 옵션확인, shopt -u : 비활성회된 것만 확인)
    • grep -rn "TDDO" --indclude "./*.py" => 위와 같은 동작이나 glob의 옵션을 이용한 형태.
      • -r옵션은 recursive (재귀)를 의미.
  • Python:
    • import glob; print(glob.glob("**/*.csv")) => 한단계 안의 subfolder까지만 검색.
    • glob.glob("**/*.md", recursive=True) => recursive하게 모든 레벨 검색.

주의 사항

  • 숨김 파일(dot으로 시작, .git 등)은 기본적으로 *에 매칭되지 않는 경우가 많음.
  • glob 의 재귀 동작은 셸 옵션이나 라이브러리 설정이 필요할 수 있음.
    • Python에서는 recursive 옵션을 True로 넘겨줘야 제대로 동작.
  • 경로 구분자(/ 또는 )와 인코딩, 로케일에 따라 매칭 결과가 달라질 수 있음.
  • {a,b} 브레이스 확장은 셸 기능이며 모든 언어나 라이브러리에 그대로 있지는 않을 수 있음: Python의 glob은 지원 안함.

 


같이 보면 좋은 자료

2023.07.03 - [Python] - [Python] Regular Expression: 표현식 기초 및 요약

 

[Python] Regular Expression: 표현식 기초 및 요약

Regular Expression : 정규표현식 요약Regular Expression (re) 의 기본적인 operator는 다음과 같음.Basic operatorDescription.Any character except `\n` (newline)aThe character a itselfabThe string ab itselfx|yx or y\yEscapes a special characte

ds31x.tistory.com

 

728x90