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