호출 시 find
파일을 찾을 수 없으면 여전히 코드 0으로 종료됩니다. 파일을 찾을 수 없을 때 실패를 나타내는 종료 코드를 반환하도록 하는 방법이 있습니까?
답변1
grep
NUL로 구분된 줄(예: GNU's grep
) 읽기를 지원하는 경우 -z
이를 사용하여 출력되는 항목이 있는지 테스트할 수 있습니다 find
.
find /some/path -print0 | grep -qz .
데이터를 다른 명령으로 파이프하려면 옵션을 제거하여 데이터를 변경하지 않고 그대로 -q
두고 grep
결과가 없으면 오류를 보고할 수 있습니다.
find /some/path -print0 | grep -z . | ...
특히 ${PIPESTATUS[1]}
종료 상태는 bash 에 저장되어야 합니다 grep
.
find
이를 지원하지 않으면 grep -print0
없이 사용 -z
하고 파일 이름에 줄바꿈이 문제를 일으키지 않기를 바랍니다.
find ... | grep '^' | ...
이 경우 ^
대신 사용하는 것이 .
더 안전할 수 있습니다 . 출력에 연속적인 개행 문자가 있으면 ^
무시되지만 .
그렇지는 않습니다.
답변2
구체적으로 반환 코드를 요청하셨습니다. 옵션에 해당 항목이 표시되지 않습니다. 하지만 이것이 내가 해결한 방법입니다( grep -z
Mac 포트에서는 아니기 때문에).
1개의 행이 발견되면 코드 0을 제공하십시오.
test 1 == `find */.kitchen/ -name private_key | wc -l`
그래서...
if [ 0 == `find */.kitchen/ -name my-file.txt | wc -l` ] ; then
echo "Nothing found"; exit;
fi
또한 일반적인 솔루션으로 다음이 유용할 수 있습니다.
답변3
나는이 질문에 매우 늦었지만 방금 우아한 답변을 찾았습니다 :-)
find . -type d -empty -and -not -name . -print -exec rmdir {} + | \
awk '{print} END {if (NR == 0) {exit(1)}}'
find
여기서는 현재 디렉터리에서 빈 디렉터리를 찾고,
빈 디렉터리를 삭제하고,
삭제된 디렉터리의 이름을 파이프에 인쇄하고,
awk
출력을 인쇄하고 , find
출력이 없으면 NR == 0
오류 코드와 함께 종료됩니다 .
이는 이제 빈 디렉터리를 반복할 수 있음을 의미합니다.
while find . -type d -empty -and -not -name . -print -exec rmdir {} + | \
awk '{print} END {if (NR == 0) {exit(1)}}'; \
do echo; done
"my" find
매개변수를 원하는 것으로 바꾸고, 터미널에 표시되는 출력을 원하지 않으면 해당 부분을 유지 awk
하거나 해당 부분을 유지하지 않으면 "voila"가 됩니다.{print}
find