Linux 와일드카드 사용: 특정 패턴 파일 복사 방법

LinuxBeginner
지금 연습하기

소개

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

중괄호 확장 (Brace Expansion) 을 사용하여 여러 패턴으로 파일 복사

중괄호 확장 {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

or (||) 를 사용하여 여러 패턴으로 파일 복사

|| 연산자를 사용하여 서로 다른 패턴과 일치하는 파일을 복사할 수도 있습니다.

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

확장 Globbing 사용

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

이러한 고급 기술은 파일을 선택할 때 더 정확하게 할 수 있도록 도와주어 파일 시스템을 관리하는 데 시간과 노력을 절약해 줍니다. 이러한 와일드카드의 조합을 실험하여 파일 관리를 보다 효율적으로 수행하는 방법을 확인하십시오.

실용적인 파일 관리 연습

이 마지막 단계에서는 배운 모든 것을 종합하여 실용적인 파일 관리 문제를 해결할 것입니다. 이 연습은 와일드카드에 대한 이해를 강화하고 실제 적용 사례를 보여줍니다.

시나리오

다양한 유형의 파일이 포함된 디렉토리를 정리해야 하는 시스템 관리자라고 가정해 보겠습니다. 다음을 수행해야 합니다.

  1. 파일 유형별로 파일 식별 및 분류
  2. 중요한 파일 백업
  3. 특정 명명 패턴을 기반으로 파일 추출

이 시나리오를 시뮬레이션해 보겠습니다.

시뮬레이션된 프로젝트 디렉토리 생성

먼저, 다양한 유형의 파일이 있는 새 프로젝트 디렉토리를 만들어 보겠습니다.

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 과 같은 보다 고급 기술로 발전했습니다.

다음은 습득한 주요 기술입니다.

  1. 파일 패턴을 일치시키기 위해 기본 와일드카드 (*, ?, []) 사용
  2. 특정 확장자 또는 명명 패턴으로 파일 복사
  3. 보다 정확한 파일 선택을 위한 고급 와일드카드 기술 사용
  4. 복잡한 패턴을 위해 여러 와일드카드 및 중괄호 확장 결합
  5. 실용적인 시나리오에서 이러한 기술을 적용하여 파일 정리 및 관리

이러한 기술은 Linux 명령줄에서 작업할 때 생산성을 크게 향상시켜 파일 관리 작업을 자동화하고 파일 시스템을 효율적으로 정리할 수 있도록 해줍니다. Linux 를 계속 사용하면서 이러한 와일드카드 기술은 일상적인 작업에서 매우 유용한 도구가 될 것입니다.

연습이 완벽을 만든다는 것을 기억하십시오. 일상 업무에서 이러한 와일드카드를 더 많이 사용할수록 더욱 편안하고 능숙해질 것입니다.