배열로 파일 이름 읽기
파일 목록을 가져온 다음 각 배열 요소가 파일 이름에 해당하는 배열로 결과를 읽고 싶습니다. 이것이 가능한가?
사용하지 마십시오 ls
, 그것은 것 아니다 이 목적을 위해. 글 로빙을 사용하십시오.
shopt -s nullglob
array=(*)
array2=(file*)
array3=(dir/*)
이 nullglob
옵션을 사용하면 일치하는 항목이없는 경우 배열이 비어있게됩니다.
다음은 현재 디렉토리에 ls 출력이있는 배열 arr을 생성합니다.
arr=( $(ls) )
의 출력을 사용하는 ls
것은 전혀 안전하지 않습니다.
ls
사용할 수있는 것보다 훨씬 낫고 안전 합니다 echo *
.
arr=( * )
echo ${#arr[@]} # will echo number of elements in array
echo "${arr[@]}" # will dump all elements of the array
사실, ls
갈 길이 아닙니다. 이 시도:
declare -a FILELIST
for f in *; do
#FILELIST[length_of_FILELIST + 1]=filename
FILELIST[${#FILELIST[@]}+1]=$(echo "$f");
done
배열에서 파일 이름을 얻으려면 다음을 사용하십시오.
echo ${FILELIST[x]}
x에서 시작하는 배열에서 n 개의 파일 이름을 얻으려면 다음을 사용하십시오.
echo ${FILELIST[@]:x:n}
bash 배열에 대한 훌륭한 자습서는 http://www.thegeekstuff.com/2010/06/bash-array-tutorial/을 참조하십시오.
bash에서는 다음과 같이 경로 이름 확장 (globbing)을 사용하여 파일 이름 배열을 만들 수 있습니다 .
#!/bin/bash
SOURCE_DIR=path/to/source
files=(
"$SOURCE_DIR"/*.tar.gz
"$SOURCE_DIR"/*.tgz
"$SOURCE_DIR"/**/*
)
위의 방법은라는 배열을 생성하고 files
여기에 N 배열 요소를 추가합니다. 배열의 각 요소 SOURCE_DIR
는 .tar.gz
또는 로 끝나는 항목 또는 .tgz
Dennis 가 주석에서 지적한 대로 하위 디렉터리 재귀가 가능한 하위 디렉터리의 항목 에 해당합니다.
그런 다음을 사용 printf
하여 경로를 포함한 배열의 내용을 볼 수 있습니다 .
printf '%s\n' "${files[@]}" # i.e. path/to/source/filename.tar.gz
또는 매개 변수 대체 를 사용 하여 경로 이름을 제외합니다.
printf '%s\n' "${files[@]##*/}" # i.e. filename.tgz
이 시도,
path="" # could set to any absolute path
declare -a array=( "${path}"/* )
나중에 목록에서 원하지 않는 항목을 제거 할 것이라고 가정합니다.
참고 URL : https://stackoverflow.com/questions/10981439/reading-filenames-into-an-array
'program tip' 카테고리의 다른 글
mysql 결과를 두 번 확인하는 방법은 무엇입니까? (0) | 2020.12.04 |
---|---|
document.write없이 HTML 페이지에 JavaScript 변수를 표시하는 방법 (0) | 2020.12.04 |
Mac에 설치 한 후 git gui가 작동하지 않음 (예 : Mountain Lion) (0) | 2020.12.04 |
방법과 기능의 차이점은 무엇입니까? (0) | 2020.12.04 |
배경색에 따라 CSS 글꼴 색상 반전 (0) | 2020.12.04 |