파이프로 제공되는 여러 파일의 존재를 테스트합니다.

파이프로 제공되는 여러 파일의 존재를 테스트합니다.

한 줄에 하나씩 파일 목록을 제공하는 명령이 있습니다. 파일 이름은 "정상"입니다. 공백이 없고 대괄호를 이스케이프할 필요가 없습니다.

test -f이제 이 명령을 유사한 명령에 전달 하고 다음과 같은 경우에만 true를 반환하고 싶습니다.모두파일이 존재. (라인 0의 동작은 정의되지 않았을 수 있습니다. 상관없습니다.)

그러므로,

make_list_of_files | test -f

그런데 실제로 일하고 있어요.

"Bashism"은 Bash에 필요하기 때문에 허용됩니다.

파일은 동일한 디렉토리에 있지 않지만 현재 디렉토리의 하위 디렉토리에 있으며 경로에는 디렉토리 이름이 포함됩니다.

dir/file1
dir/file2
dir2/file3

답변1

allExist(){
    while IFS= read -r f; do
      test -e "$f" || return 1
    done
}

make_list_of_files | allExist

이는 모든 POSIX 쉘에서 작동합니다.

답변2

명령이 0이 아닌 상태를 반환하는 경우 상태 코드 123을 반환하는 xargs를 사용하면 훨씬 더 쉽습니다.

if make_list_of_files | xargs ls &>/dev/null; then
    echo "All files exist";
else
    echo "here";
fi

(ba)sh에서 한 줄로 이 작업을 수행할 수도 있습니다.

$ make_list_of_files | xargs ls &>/dev/null || echo "missing file"
$ make_list_of_files | xargs ls &>/dev/null && echo "all files present"

관련 정보