bash 쉘에서 요소 존재 여부에 따라 경로 배열을 필터링하는 방법은 무엇입니까?

bash 쉘에서 요소 존재 여부에 따라 경로 배열을 필터링하는 방법은 무엇입니까?

나는 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.

관련 정보