소개
Linux 와일드카드 (wildcard), 또는 globbing 패턴이라고도 불리는 특수 문자는 셸에서 파일 이름을 일치시키고 확장하는 데 사용됩니다. 이러한 강력한 도구를 사용하는 방법을 이해하면 Linux 명령줄 작업 시 효율성을 크게 향상시킬 수 있습니다. 이 튜토리얼에서는 Linux 와일드카드의 기본 사항을 안내하고 특정 패턴의 파일을 복사하여 파일 관리 작업을 간소화하는 방법을 보여줍니다.
Linux 와일드카드 (wildcard), 또는 globbing 패턴이라고도 불리는 특수 문자는 셸에서 파일 이름을 일치시키고 확장하는 데 사용됩니다. 이러한 강력한 도구를 사용하는 방법을 이해하면 Linux 명령줄 작업 시 효율성을 크게 향상시킬 수 있습니다. 이 튜토리얼에서는 Linux 와일드카드의 기본 사항을 안내하고 특정 패턴의 파일을 복사하여 파일 관리 작업을 간소화하는 방법을 보여줍니다.
Linux 에서 와일드카드 (wildcard) 는 패턴을 사용하여 여러 파일을 일치시키는 데 도움이 되는 특수 문자입니다. 한 번에 많은 파일을 관리해야 할 때 특히 유용합니다. 현재 디렉토리의 파일을 검토하여 가장 일반적인 와일드카드를 살펴보겠습니다.
먼저, 작업할 모든 파일을 확인해 보겠습니다.
cd ~/project/wildcards_lab
ls
다음과 같이 다양한 확장자를 가진 파일 목록이 표시됩니다.
backup data_02.csv doc2.pdf file3.txt image3.jpg readme.md
config.yml data_03.csv documents images report1.txt report_final.txt
data_01.csv doc1.pdf file1.txt image1.jpg report2.txt script.sh
file2.txt image2.jpg
별표 *는 가장 일반적인 와일드카드입니다. 이는 임의의 수의 문자 (0 포함) 와 일치합니다. 실제로 사용해 보겠습니다.
모든 텍스트 파일 (.txt 로 끝나는 파일) 을 나열하려면:
ls *.txt
다음과 같은 결과가 표시됩니다.
file1.txt file2.txt file3.txt report1.txt report2.txt report_final.txt
모든 이미지 파일 (.jpg 로 끝나는 파일) 을 나열하려면:
ls *.jpg
출력:
image1.jpg image2.jpg image3.jpg
물음표 ?는 정확히 하나의 문자와 일치합니다. 이를 사용하여 파일을 찾아보겠습니다.
ls file?.txt
이 명령은 "file"로 시작하고 정확히 하나의 문자가 뒤따르며 ".txt"로 끝나는 파일을 나열합니다.
출력:
file1.txt file2.txt file3.txt
대괄호 []를 사용하면 지정된 집합의 단일 문자와 일치시킬 수 있습니다.
ls data_0[1-2].csv
이 명령은 "data_0"으로 시작하고 1 또는 2 가 뒤따르며 ".csv"로 끝나는 CSV 파일을 나열합니다.
출력:
data_01.csv data_02.csv
Linux 에서 점 (.) 으로 시작하는 파일은 숨겨진 파일입니다. 와일드카드를 사용하여 이러한 파일도 찾을 수 있습니다.
ls .*
출력에는 다음이 포함됩니다.
. .. .hidden_file1 .hidden_file2
참고: . 및 ..는 각각 현재 디렉토리와 상위 디렉토리를 나타냅니다.
이러한 명령을 시도하고 결과를 관찰하십시오. 파일 복사 작업을 위해 사용하기 전에 이러한 기본 와일드카드를 이해하는 것이 필수적입니다.
이제 기본 와일드카드를 이해했으므로 이를 사용하여 파일을 효율적으로 복사해 보겠습니다. 파일 복사의 일반적인 구문은 다음과 같습니다.
cp [options] source_file(s) destination
몇 가지 정리 디렉토리를 만들고 다양한 패턴으로 파일을 복사하는 연습을 해보겠습니다.
모든 텍스트 파일을 백업 디렉토리로 복사해 보겠습니다.
cd ~/project/wildcards_lab
cp *.txt backup/
이 명령은 .txt로 끝나는 모든 파일을 백업 디렉토리로 복사합니다. 확인해 보겠습니다.
ls backup/
다음과 같은 결과가 표시됩니다.
file1.txt file2.txt file3.txt report1.txt report2.txt report_final.txt
다음으로, 모든 이미지 파일을 images 디렉토리로 복사해 보겠습니다.
cp image*.jpg images/
이 명령은 "image"로 시작하고 ".jpg"로 끝나는 모든 파일을 images 디렉토리로 복사합니다. 확인해 보겠습니다.
ls images/
출력:
image1.jpg image2.jpg image3.jpg
중괄호 확장 {pattern1,pattern2}을 사용하면 여러 패턴을 지정할 수 있습니다. PDF 및 CSV 파일을 모두 documents 디렉토리로 복사해 보겠습니다.
cp *.{pdf,csv} documents/
이 명령은 .pdf 또는 .csv로 끝나는 모든 파일을 documents 디렉토리로 복사합니다. 확인해 보겠습니다.
ls documents/
출력:
data_01.csv data_02.csv data_03.csv doc1.pdf doc2.pdf
|| 연산자를 사용하여 서로 다른 패턴과 일치하는 파일을 복사할 수도 있습니다.
cp report*.txt script.sh backup/
이 명령은 "report"로 시작하고 ".txt"로 끝나는 모든 파일과 script.sh 파일을 백업 디렉토리로 복사합니다. 이제 백업 디렉토리에 무엇이 있는지 확인해 보겠습니다.
ls backup/
업데이트된 출력:
file1.txt file2.txt file3.txt report1.txt report2.txt report_final.txt script.sh
파일을 복사할 때 타임스탬프 및 권한과 같은 속성을 유지하고 싶을 수 있습니다. -p 옵션을 사용하십시오.
cp -p config.yml backup/
속성이 유지되었는지 확인하려면:
ls -l config.yml
ls -l backup/config.yml
타임스탬프와 권한은 두 파일 모두 동일해야 합니다.
이러한 명령을 사용해보고 다양한 와일드카드 패턴이 파일을 효율적으로 복사하는 데 어떻게 도움이 되는지 살펴보십시오.
이제 기본 사항을 숙달했으므로, 보다 구체적인 파일 작업을 수행하기 위해 몇 가지 더 고급 와일드카드 패턴을 살펴보겠습니다.
먼저, 고급 기술을 연습할 새 디렉토리를 만들어 보겠습니다.
cd ~/project/wildcards_lab
mkdir advanced
문자 클래스를 사용하면 문자 집합에서 단일 문자를 일치시킬 수 있습니다.
## 'd' 또는 'f'로 시작하는 파일 복사
cp [df]*.* advanced/
이것은 'd' 또는 'f'로 시작하는 모든 파일을 advanced 디렉토리로 복사합니다. 확인해 보겠습니다.
ls advanced/
출력:
data_01.csv data_02.csv data_03.csv doc1.pdf doc2.pdf file1.txt file2.txt file3.txt
여는 대괄호 뒤에 ! 또는 ^ 기호를 사용하여 문자 클래스를 부정할 수 있습니다. 'r' 또는 'i'로 시작하지 않는 파일을 복사해 보겠습니다.
mkdir advanced/filtered
cp [^ri]*.txt advanced/filtered/
확인해 보겠습니다.
ls advanced/filtered/
출력:
file1.txt file2.txt file3.txt
더 구체적인 패턴을 만들기 위해 서로 다른 와일드카드를 결합해 보겠습니다.
## 'data_0'으로 시작하고, 단일 숫자가 뒤따르며, '.csv'로 끝나는 파일 복사
cp data_0?.csv advanced/
CSV 파일이 올바르게 복사되었는지 확인해 보겠습니다.
ls advanced/*.csv
출력:
advanced/data_01.csv advanced/data_02.csv advanced/data_03.csv
Bash 는 표준 와일드카드보다 강력한 확장 globbing 패턴을 제공합니다. 먼저 확장 globbing 을 활성화합니다.
shopt -s extglob
이제 다음과 같은 패턴을 사용할 수 있습니다.
?(pattern): 패턴의 0 또는 1 회 일치*(pattern): 0 회 이상 일치+(pattern): 1 회 이상 일치@(pattern): 정확히 1 회 일치!(pattern): 패턴을 제외한 모든 것과 일치예시를 하나 해보겠습니다.
## 숫자가 뒤따르는 .txt 파일 복사
mkdir advanced/numbered
cp +([0-9])*.txt advanced/numbered/
원래 파일이 이 정확한 패턴과 일치하지 않으므로 결과가 비어 있을 수 있습니다. 일치하는 파일을 만들어 보겠습니다.
touch 123file.txt
cp +([0-9])*.txt advanced/numbered/
ls advanced/numbered/
출력:
123file.txt
중괄호 확장은 복잡한 패턴을 만드는 데 유용합니다.
## 보고서 파일용 디렉토리 생성
mkdir advanced/reports
## 모든 보고서 파일 및 구성 파일 복사
cp {report*.txt,*.yml} advanced/reports/
확인해 보겠습니다.
ls advanced/reports/
출력:
config.yml report1.txt report2.txt report_final.txt
이러한 고급 기술은 파일을 선택할 때 더 정확하게 할 수 있도록 도와주어 파일 시스템을 관리하는 데 시간과 노력을 절약해 줍니다. 이러한 와일드카드의 조합을 실험하여 파일 관리를 보다 효율적으로 수행하는 방법을 확인하십시오.
이 마지막 단계에서는 배운 모든 것을 종합하여 실용적인 파일 관리 문제를 해결할 것입니다. 이 연습은 와일드카드에 대한 이해를 강화하고 실제 적용 사례를 보여줍니다.
다양한 유형의 파일이 포함된 디렉토리를 정리해야 하는 시스템 관리자라고 가정해 보겠습니다. 다음을 수행해야 합니다.
이 시나리오를 시뮬레이션해 보겠습니다.
먼저, 다양한 유형의 파일이 있는 새 프로젝트 디렉토리를 만들어 보겠습니다.
cd ~/project/wildcards_lab
mkdir project_files
cd project_files
## 다양한 유형의 파일 생성
touch project_doc_v1.txt project_doc_v2.txt project_doc_final.txt
touch data_2023_01.csv data_2023_02.csv data_2023_03.csv
touch config_dev.yml config_test.yml config_prod.yml
touch backup_script_v1.sh backup_script_v2.sh
touch image001.png image002.png image003.png
touch .project_config .project_log
디렉토리를 확인해 보겠습니다.
ls
출력:
backup_script_v1.sh config_prod.yml data_2023_02.csv image002.png project_doc_v1.txt
backup_script_v2.sh config_test.yml data_2023_03.csv image003.png project_doc_v2.txt
config_dev.yml data_2023_01.csv image001.png project_doc_final.txt
참고: 숨겨진 파일 (.으로 시작) 은 기본 ls 출력에 나타나지 않습니다.
이제 서로 다른 파일 유형에 대한 디렉토리를 만들고 파일을 정리해 보겠습니다.
## 디렉토리 생성
mkdir docs configs scripts data images backups
## 텍스트 문서를 docs 디렉토리로 복사
cp *doc*.txt docs/
## 구성 파일을 configs 디렉토리로 복사
cp *.yml configs/
## 스크립트를 scripts 디렉토리로 복사
cp *.sh scripts/
## 데이터 파일을 data 디렉토리로 복사
cp *.csv data/
## 이미지를 images 디렉토리로 복사
cp *.png images/
정리를 확인해 보겠습니다.
echo "Documents:"
ls docs/
echo "Configurations:"
ls configs/
echo "Scripts:"
ls scripts/
echo "Data files:"
ls data/
echo "Images:"
ls images/
출력:
Documents:
project_doc_final.txt project_doc_v1.txt project_doc_v2.txt
Configurations:
config_dev.yml config_prod.yml config_test.yml
Scripts:
backup_script_v1.sh backup_script_v2.sh
Data files:
data_2023_01.csv data_2023_02.csv data_2023_03.csv
Images:
image001.png image002.png image003.png
모든 중요한 파일을 포함하는 포괄적인 백업을 만들어 보겠습니다.
## 이미지 파일이 아닌 모든 파일 백업
cp !(*.png|*backup*) backups/
## 백업 디렉토리에 무엇이 있는지 확인해 보겠습니다.
ls backups/
출력:
config_dev.yml config_test.yml data_2023_01.csv data_2023_03.csv project_doc_final.txt project_doc_v2.txt
config_prod.yml data_2023_02.csv project_doc_v1.txt
이제 특정 패턴과 일치하는 파일을 찾아보겠습니다.
## 2023년의 모든 파일 찾기
echo "Files from 2023:"
ls *2023*
## 최종 또는 프로덕션 버전 모두 찾기
echo "Final/Production versions:"
ls *final* *prod*
## 버전 2 파일 모두 찾기
echo "Version 2 files:"
ls *v2*
출력:
Files from 2023:
data_2023_01.csv data_2023_02.csv data_2023_03.csv
Final/Production versions:
config_prod.yml project_doc_final.txt
Version 2 files:
backup_script_v2.sh project_doc_v2.txt
마지막으로, 프로덕션 구성 및 최종 문서만 포함하는 배포 패키지를 만들어 보겠습니다.
mkdir deployment_package
cp *prod*.yml *final*.txt deployment_package/
## 배포 패키지 확인
ls deployment_package/
출력:
config_prod.yml project_doc_final.txt
축하합니다! Linux 와일드카드를 사용하여 실용적인 파일 관리 연습을 성공적으로 완료했습니다. 이러한 기술은 Linux 환경에서 파일을 효율적으로 관리하고, 반복적인 작업을 자동화하며, 파일 시스템을 효과적으로 정리하는 데 매우 유용합니다.
이 랩에서는 특정 패턴으로 파일을 복사하고 관리하기 위해 Linux 와일드카드를 효과적으로 사용하는 방법을 배웠습니다. 별표 (*), 물음표 (?), 대괄호 ([]) 와 같은 기본 와일드카드로 시작하여 문자 클래스, 부정 및 확장 globbing 과 같은 보다 고급 기술로 발전했습니다.
다음은 습득한 주요 기술입니다.
이러한 기술은 Linux 명령줄에서 작업할 때 생산성을 크게 향상시켜 파일 관리 작업을 자동화하고 파일 시스템을 효율적으로 정리할 수 있도록 해줍니다. Linux 를 계속 사용하면서 이러한 와일드카드 기술은 일상적인 작업에서 매우 유용한 도구가 될 것입니다.
연습이 완벽을 만든다는 것을 기억하십시오. 일상 업무에서 이러한 와일드카드를 더 많이 사용할수록 더욱 편안하고 능숙해질 것입니다.