파일 이름에 쉘 확장(A|B)이 있습니까?

파일 이름에 쉘 확장(A|B)이 있습니까?

or예를 들어, 파일을 읽을 때 셸에서 선택 항목을 확장할 수 있는지 여부입니다.

예를 들어 grep파일에서 A 또는 B를 일치시키는 것과 같은 구문이 지원됩니다.(A|B)

마찬가지로, 다음 파일이 있는 경우:

file1.txt
file2.txt
file3.txt
file4.txt
file5.txt

범위가 넓어지기 때문에 할 수 있어요 cat file{1..5}.txt. bash몇 개의 파일에 대해 이 작업을 수행하는 동등한 방법이 있습니까?

예를 들어 cat file(1|5).txt, 2?만 인쇄하세요.

답변1

일치시킬 표준 파일 이름 와일드카드 패턴숫자[0-9]. 이는 단일 숫자와 일치합니다.

cat file[0-9].txt

다음 중 두 가지만 선택하세요.

cat file[25].txt

9보다 큰 숫자의 경우 중괄호 확장이 유용합니다(그러나 와일드카드 패턴과 중괄호 확장 간의 차이점은 아래 참고 사항을 참조하세요).

cat file{25..60}.txt

마찬가지로 중괄호 확장을 사용하면 개별 숫자가 허용됩니다.

cat file{12,45,900,xyz}.txt

(위의 예에서 중괄호 확장은 산술 루프를 포함하지 않고 단순히 제공된 문자열을 기반으로 이름을 생성합니다.)

에서는 셸 옵션( )을 활성화하면 bash다음 도 작동합니다.extglobshopt -s extglob

cat file@(12|45|490|foo).txt

이 패턴은 - 구분 기호가 포함된 @(...)모든 패턴과 일치합니다 .|


[...]및 중괄호 확장과 같은 와일드카드 패턴의 차이점은 @(...)중괄호 확장이 다음과 같다는 것입니다.명령줄에서 생성현재 디렉터리에 있는 기존 이름과 실제로 일치하지 않을 수도 있습니다. 파일 이름 와일드카드 패턴은 이름과 일치하지만 가능한 이름이 모두 존재하지 않더라도 쉘은 불평하지 않습니다. 만약에아니요nullglob일치하는 이름이 있는 경우 쉘 옵션도 설정되지 않으면 패턴은 확장되지 않은 상태로 유지되며 , 이 경우 패턴은 제거됩니다.

예:

touch file1

ls file[0-9]

file1여기서는 파일 목록만 표시됩니다.

만약 당신이 그것을 가지고 있다면 ls file{0..9}, ls당신은 그것을 찾을 수 없다고 불평할 것 file0입니다 file2.

다음 예에서 첫 번째 명령은기존 이름주어진 패턴과 일치하지만 두 번째 줄은 아직 존재하지 않는 파일을 생성합니다.

touch file[0-9]

touch file{0..9}

답변2

사용할 구문은 sum file{1,2}으로 평가됩니다 .file1file2

$ ls
$ touch file{1,2,3,4,5,6,7,8,9}
$ ls
file1  file2  file3  file4  file5  file6  file7  file8  file9

touch file{1..9}Inian이 아래에서 지적했듯이... 이 예에서는 수행하기가 더 쉬울 것입니다...

$ ls
$ touch file{1..9}
$ ls
file1  file2  file3  file4  file5  file6  file7  file8  file9

다음과 같이 여러 표현식을 사용할 수도 있습니다.

$ ls
$ touch file{1..9}{a..z}
$ ls
file1a file1b file1c
[...]
file9x file9y file9z

예, 위 작업을 수행하면 234( 926)개의 파일이 생성됩니다.

답변3

예, 쉘에서 중괄호 확장을 사용할 수 있습니다 bash. 몇 가지 파일의 경우 그냥 하거나 file{1..2}좋아하세요.file{1,2}

또는 어떤 경우에는 파일이 존재하지 않는 것이 걱정된다면 간단한 루프를 수행하십시오.

for file in file{1..4}.txt; do
    [ -f "$file" ] || continue
    echo "$file" # Do other actions on file here
done

또는 연결만 파일에 대한 유일한 작업인 경우불확실한언제든지 존재하지 않을 것 같은 파일은 표시 cat하고 오류를 억제하세요. /dev/null파일을 사용할 수 없는 경우 표준 오류를 로 리디렉션하면 오류가 억제됩니다.

cat file{1,5}.txt 2>/dev/null

file[15]또는 파일을 찾을 수 없어도 오류를 표시하지 않는 glob 표현식을 사용하세요 .

cat file[15].txt

관련 정보