![bash 쉘에서 요소 존재 여부에 따라 경로 배열을 필터링하는 방법은 무엇입니까?](https://linux55.com/image/217307/bash%20%EC%89%98%EC%97%90%EC%84%9C%20%EC%9A%94%EC%86%8C%20%EC%A1%B4%EC%9E%AC%20%EC%97%AC%EB%B6%80%EC%97%90%20%EB%94%B0%EB%9D%BC%20%EA%B2%BD%EB%A1%9C%20%EB%B0%B0%EC%97%B4%EC%9D%84%20%ED%95%84%ED%84%B0%EB%A7%81%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
나는 bash 쉘을 사용하고 있습니다. 파일 경로를 나타내는 배열이 있습니다
MY_FILES=(/path/to/file1 /tmp/abc.txt /tmp/test.sh /path/to/file2 /path/to/file3 /tmp/abc.txt)
파일 시스템에 실제로 존재하는 경로를 사용하여 새로운 요소 배열을 어떻게 형성합니까?
답변1
MY_FILES=(/path/to/file1 /tmp/abc.txt /tmp/test.sh /path/to/file2 /path/to/file3 /tmp/abc.txt)
existing=()
for pathname in "${MY_FILES[@]}"; do
if [ -e "$pathname" ]; then
existing+=( "$pathname" )
fi
done
위의 명령은 existing
파일 시스템의 기존 이름에 해당하는 배열의 항목을 포함하는 새 배열을 만듭니다. MY_FILES
이는 배열의 항목을 반복하고 test 를 사용하여 각 요소를 차례로 테스트함으로써 이를 수행합니다 -e
.진짜주어진 경로명이 존재하는 경우. 현재 경로 이름이 존재하는 경우 배열 끝에 새 요소로 추가됩니다 existing
.
또한 각 이름이 다음과 같은지 확인하고 싶다면일반 파일, -e
테스트를 테스트로 변경하세요 -f
.