bash에서 디렉토리의 특정 파일을 배열에 넣는 방법은 무엇입니까?

bash에서 디렉토리의 특정 파일을 배열에 넣는 방법은 무엇입니까?

file1.txt, file2.txt 및 file3.txt라는 3개의 파일이 있는 디렉토리가 있다고 가정합니다.

이제 이러한 파일 이름으로 배열을 어떻게 채울 수 있습니까? (모든 파일에는 특정 접두어, 즉 file이 있고 파일 뒤에는 1, 2, 3 등이 될 수 있다는 것을 알고 있습니다.

답변1

Greg의 Wiki에서: Bash 가이드배열의 항목:

files=()
while read -r -d $'\0'; do
    files+=("$REPLY")
done < <(find *.txt -print0)

페이지에는 배열에 대한 자세한 설명이 있으며, 구조 요소를 요소별로 분류하여 전체적으로 읽어 볼 가치가 있습니다.

답변2

파일이 모두 동일한 디렉토리에 있으면 jasonwryan의 답변 외에 몇 가지 다른 옵션이 있습니다.

전역 사용:

files=(file[0-9].txt)

질문의 예제 파일만 일치합니다.

files=(file[1-3].txt)

bash 버전 4 이상이면 재귀적으로 glob을 수행할 수도 있습니다.

shopt -s globstar
files=(**/file[0-9].txt)

중괄호 확장을 사용하여 샘플 파일만 포함하도록 배열을 제한합니다.

files=(file{1..3}.txt)

다른 두 예제와 달리 이는 파일 이름이 존재하지 않더라도 배열을 파일 이름으로 채웁니다. 따라서 스텐트 확장은 이상적이지 않을 수 있습니다.

관련 정보