기술 가이드

Linux 셸 와일드카드 완전 가이드

6 min read 리눅스 업데이트됨 17 Sep 2025
Linux 와일드카드 가이드 — 글로빙 기초와 팁
Linux 와일드카드 가이드 — 글로빙 기초와 팁

리눅스 마스코트가 노트북에서 여러 터미널을 사용하는 모습.

빠른 링크

  • 와일드카드란

  • 한 문자 지정하기 “?”

  • 여러 문자 매칭하기 “*”

  • 대괄호로 문자 범위 매칭하기

  • 소괄호로 교대 매칭하기

  • “!”와 “^”로 제외하기

  • 인용으로 와일드카드 끄기

와일드카드란

와일드카드(또는 메타문자)는 다른 문자들을 대신해서 사용되는 특수 문자입니다. 카드 게임의 와일드 카드가 다른 카드처럼 쓸 수 있듯, 셸의 와일드카드는 파일명이나 경로에서 여러 항목을 한 번에 지정할 수 있게 합니다.

중요 포인트: 와일드카드 확장은 프로그램이 아닌 셸에서 처리됩니다. 즉 you type a pattern containing wildcards, the shell expands matching filenames and passes the expanded list to the program. 프로그램 자체는 와일드카드를 보지 못합니다.

셸 종류에 따라 지원하는 패턴이 다릅니다. 가장 흔한 기능은 단일 문자 매칭(?)과 다중 문자 매칭(*)입니다. 고급 매칭을 위해 Bash에서는 shopt으로 옵션을 켜야 하고, zsh에서는 setopt으로 확장 글로빙을 활성화합니다.

용어 정리 한 줄:

  • 글로빙(globbing): 와일드카드 패턴으로 파일 목록을 만드는 과정.

한 문자 지정하기 “?”

“?”는 정확히 한 문자를 매칭합니다. 예를 들어 확장자가 .pl(Perl)과 .py(Python)가 혼재된 디렉터리에서 이름이 photo_01, photo_02 같은 JPEG 파일 목록을 보려면:

ls photo.0?.jpg

패턴에 맞는 파일이 없으면 빈 출력이나 “no matches found” 같은 오류가 나올 수 있습니다. 먼저 echo로 테스트하면 안전합니다:

echo photo.0?.jpg

여러 문자 매칭하기 “*”

“*”(애스터리스크)는 0개 이상의 문자를 매칭합니다. 가장 흔히 쓰이는 글로브입니다. 현재 디렉터리의 모든 JPEG 파일을 보려면:

ls *.jpg

디렉터리 내부를 지정할 수도 있습니다:

ls photos/*.jpg

한 문자 매칭(?)과 조합도 가능합니다. 예를 들어 .pl과 .py를 모두 매칭하려면:

ls *.p?

문자열 중간의 문자도 매칭할 수 있습니다:

ls *d*

zsh(또는 Bash에서 globstar 옵션 활성화 시)에서는 재귀적으로 하위 디렉터리까지 매칭할 수 있습니다. 홈 디렉터리 하위의 모든 파일을 보려면:

ls ~/

다른 경로명에서도 재귀 검색이 가능합니다:

ls /usr//bin

zsh에서 " 연산자를 이용해 /usr 디렉터리의 재귀 목록을 보여주는 화면." class="block w-auto max-w-full h-auto mx-auto py-2 rounded-xl "/>

참고: Bash에서 (globstar)을 사용하려면 아래를 실행하세요:

shopt -s globstar

**”(세 개의 )는 심볼릭 링크를 통해서도 탐색할 수 있는 설정에 따라 다르게 동작할 수 있습니다. 쉘과 옵션에 따라 동작이 달라지므로 문서를 확인하세요.

Windows의 “.“ 관습과 달리, 리눅스에서는 단순히 “*”만으로 모든 파일을 의미합니다.

파일을 다른 디렉터리로 복사하려면:

cp * /other/directory

중요: rm 같은 파괴적 명령과 와일드카드를 함께 쓸 때는 매우 주의하세요. 실수로 큰 범위를 삭제하면 복구가 어렵습니다. 항상 미리 확인하고, 가능하면 인터랙티브 옵션(-i)이나 백업을 사용하세요.

대괄호로 문자 범위 매칭하기

대괄호 [] 안에 문자들을 나열하면 그 중 하나와 매칭합니다:

[abc]

대시(-)를 사용해 범위를 지정할 수 있습니다:

[a-z]
[A-Z]
[0-9]

조합도 가능합니다:

[a-zA-Z]
[a-zA-Z0-9]

다른 와일드카드와 합쳐 쓰는 경우가 일반적입니다. 예를 들어 .pl과 .py를 매칭하려면:

ls *.p[ly]

대괄호 연산자를 사용한 Perl 및 Python 스크립트의 ls 목록 화면.

앞에서 문자로 시작하는 파일들만 찾고 싶다면:

ls py*

추가로 중괄호 확장(brace expansion)은 쉘에서 값(단어) 목록을 생성합니다. 예를 들어 “cat”과 “dog”를 출력하려면:

echo {cat,dog}

중괄호를 사용해

연속된 값도 만들 수 있습니다. 알파벳 a부터 d까지:

echo {a..d}

a부터 d까지를 중괄호 확장으로 출력한 화면.

숫자도 가능합니다:

echo {1..10}

1부터 10까지 중괄호 확장 출력 화면.

중괄호 확장은 글로빙과는 별개로, 셸이 직접 단어를 생성하는 기능입니다. 생성된 단어가 실제 파일인지의 여부는 나중에 명령이 실행될 때 판단됩니다.

소괄호로 교대 매칭하기

소괄호와 수직 바(|)를 사용하면 “또는“ 조건을 표현할 수 있습니다. 이 기능은 일부 쉘에서는 확장 글로빙(extglob)을 켜야 사용 가능합니다.

예를 들어 Perl과 Python 스크립트를 다시 매칭하려면:

ls *.(pl|py)

또는 정규식 스타일로 그룹을 쓸 수도 있습니다:

.*p(l|y)

extglob에서 특별한 패턴들이 있습니다. 몇 가지 예:

  • +(a|b): 하나 또는 그 이상 중 하나
  • *(a|b): 0개 이상
  • ?(a|b): 0개 또는 1개
  • @(a|b): 정확히 하나

Bash에서 이러한 패턴을 사용하려면:

shopt -s extglob

zsh에서는 이미 더 강력한 패턴을 지원하거나 다음을 사용합니다:

setopt EXTENDED_GLOB

제외 매칭 “!”와 “^”

대괄호 안에서 부정은 ! 또는 ^로 표현합니다. 예를 들어 소문자가 아닌 파일명을 찾으려면:

ls [!a-z]

동일한 의미로:

ls [^a-z]

소괄호 기반의 extglob에서도 !을 사용해 특정 그룹을 제외할 수 있습니다:

!(a|b|c)

이 패턴은 a, b, c가 아닌 모든 항목을 의미합니다(쉘과 옵션에 따라 동작이 다를 수 있음).

인용으로 와일드카드 끄기

와일드카드 확장을 원하지 않을 때는 인용으로 끌 수 있습니다. 정규표현식이나 패턴을 그대로 프로그램에 전달하려면 유용합니다.

  • 작은따옴표(‘’)는 모든 확장을 끕니다(셸 변수도 포함).
grep '^foo'
  • 큰따옴표(“”)는 셸 변수를 확장하지만 와일드카드 확장은 억제합니다.
grep "^$expression"

예시: 변수 안에 패턴이 있고 파일명 와일드카드를 그대로 쓰고 싶다면 상황에 맞게 결합하여 사용하세요.


실전 팁과 안전 수칙

  • 항상 먼저 확장 결과를 확인하세요: echo 또는 printf로 확인합니다.
echo *.txt
printf '%s\n' *.txt
  • 위험한 명령은 인터랙티브 모드로 실행하세요:
rm -i *.bak
  • 대량 작업 전에 작은 범위로 테스트하세요. 예: cp나 mv도 동일.

  • 경로에 공백이 포함될 수 있다면 항상 따옴표나 null문자 안전 처리(find -print0 등)를 사용하세요.

  • 복잡한 조건이나 깊은 디렉터리 트리 탐색에는 find가 더 안전하고 유연합니다.

find . -type f -name "*.log" -mtime +30 -exec rm -i {} \;
  • Bash에서 재귀 글로브를 쓰려면 globstar를 켜세요:
shopt -s globstar
ls **/*.py
  • zsh 사용자는 기본적으로 확장된 글로빙을 제공하는 경우가 많습니다. zsh 문서를 참조하세요.

언제 와일드카드가 실패하는가 (반례)

  • 쉘 옵션이 비활성화된 경우 extglob, globstar 등의 고급 패턴이 작동하지 않습니다.
  • 패턴이 따옴표로 감싸져 있으면 확장이 일어나지 않습니다.
  • 빈 결과를 허용하지 않는 쉘 설정(예: zsh의 nomatch)이면 오류가 발생합니다.
  • 파일 시스템 권한 문제로 파일을 읽을 수 없는 경우 매칭이 불완전합니다.
  • 특수문자를 포함한 파일명(제어문자, 개행 등)은 예기치 않은 동작을 유발할 수 있습니다.

대안 접근법

  • find: 조건(수정시간, 소유자, 크기 등)에 따른 정교한 검색과 -exec로 실행을 연결할 때 유리합니다.
  • grep(파일 내용 검색): 파일명 패턴이 아닌 내용 기반 검색에는 grep을 사용하세요.
  • rsync: 대량 복사/동기화 시 성능과 안전성 측면에서 유리합니다.
  • Python/Perl 스크립트: 복잡한 논리를 적용해야 할 때.

결정 흐름(간단 가이드)

다음 다이어그램을 보고 어떤 도구나 패턴을 쓸지 결정하세요.

flowchart TD
  A[문제: 파일 집합을 선택해야 함] --> B{조건으로 선택하려는가}
  B -->|파일명 패턴만| C[쉘 와일드카드'globbing']
  B -->|파일 내용 또는 날짜/소유자 등| D[find 사용]
  C --> E{재귀가 필요한가}
  E -->|예| F{쉘이 globstar 지원?}
  F -->|예| G[** 또는 shopt -s globstar]
  F -->|아니오| D
  E -->|아니오| H[*, ?, [], {} 사용]
  D --> I[find + -exec 또는 xargs]
  I --> J[실행 전 테스트: -print 또는 echo]
  H --> J
  G --> J

운영자/개발자별 체크리스트

관리자(운영자):

  • 중요한 시스템 디렉터리에서 * 사용 전 두 번 확인
  • 자동화 스크립트에 백업 및 롤백 처리 포함
  • crontab에서 glob 사용 시 경로와 환경 변수 검증

개발자:

  • 빌드 스크립트에서 확장 결과를 로그로 남기기
  • 공백/특수문자 파일을 고려한 처리
  • 테스트 환경에서 먼저 실행

초보 사용자:

  • 먼저 echo로 결과 확인
  • rm 같은 명령은 -i 옵션으로 실행
  • 중괄호 확장과 글로빙의 차이를 이해

SOP: 대량 파일 삭제 전 점검 절차

  1. 삭제할 파일 패턴을 echo로 확인한다.
echo /var/logs/app/*.log
  1. 파일 목록을 파일로 저장하고 검토한다.
ls -1 /var/logs/app/*.log > /tmp/delete-list.txt
less /tmp/delete-list.txt
  1. 샘플 파일에 대해 수동 삭제 테스트를 한다.
rm -i /var/logs/app/example.log
  1. 자동 삭제를 실행할 때는 인터랙티브 또는 시뮬레이션 모드를 사용한다. 가능하면 백업을 생성한다.
# 시뮬레이션: find로 목록만 출력
find /var/logs/app -name "*.log" -print
# 실제 삭제(확인 후)
find /var/logs/app -name "*.log" -mtime +30 -exec rm {} \;
  1. 작업 후 로그와 결과를 검증한다.

테스트 케이스 / 수용기준

  • 단일 문자 매칭: photo.0?.jpg가 photo.01.jpg만 포함하는지 확인
  • 다중 문자 매칭: *.txt가 모든 .txt 파일을 포함하는지 확인
  • 범위 매칭: [a-c]*가 a~c로 시작하는 파일만 포함하는지 확인
  • 제외 매칭: [!0-9]*가 숫자로 시작하지 않는 파일만 포함하는지 확인
  • 인용 테스트: ‘*.txt’가 실제로 ‘*’가 포함된 문자 그대로 전달되는지 확인

간단 용어사전 (1줄씩)

  • 와일드카드: 파일명이나 경로에서 여러 항목을 지정하는 특수 문자.
  • 글로빙: 와일드카드 패턴을 파일 목록으로 확장하는 과정.
  • extglob: Bash의 확장 패턴 기능을 켜는 옵션.
  • globstar: Bash에서 **로 재귀 검색을 가능하게 하는 옵션.

마무리 요약

와일드카드는 일상적인 파일 작업을 빠르게 만들어 줍니다. 기본은 ?와 *이며, [], {}, ()를 조합해 정교한 패턴을 만들 수 있습니다. 그러나 강력함만큼 위험도 있으니 항상 확장 결과를 확인하고 백업/테스트를 병행하세요.


중요: 실수로 파일을 삭제하거나 덮어쓰지 않도록 항상 echo/ls로 먼저 확인하고, 자동화 스크립트에는 안전장치를 추가하세요.

공유하기: X/Twitter Facebook LinkedIn Telegram
저자
편집

유사한 자료

안드로이드 홈 화면별 배경화면 설정 가이드
Android 가이드

안드로이드 홈 화면별 배경화면 설정 가이드

데이터 브로커에서 내 정보 삭제하는 방법
프라이버시

데이터 브로커에서 내 정보 삭제하는 방법

안드로이드 홈 화면별 배경화면 설정 가이드
안드로이드 커스터마이징

안드로이드 홈 화면별 배경화면 설정 가이드

Apache Tomcat 모니터링 및 관리 가이드
인프라 모니터링

Apache Tomcat 모니터링 및 관리 가이드

디즈니 플러스 앱 문제 해결 가이드
스트리밍 가이드

디즈니 플러스 앱 문제 해결 가이드

Windows 작업 스케줄러로 Python 스크립트 자동 실행
자동화

Windows 작업 스케줄러로 Python 스크립트 자동 실행