일반적으로 특정 사양과 일치하는 파일이 식별되면 명령을 실행하려면 를 find
사용할 수 있습니다 -exec
. 그러나 제 경우에는 find
일치하는 항목이 발견되면 쉘/스크립트를 종료하고 싶지만 -exec
그렇게 할 수 없습니다. [ find
확실히-exec
bash 함수를 호출할 수도 없습니다..)
예를 들어, 트리를 삭제하는 스크립트에서 빈 디렉터리만 포함된 경우에만 디렉터리가 아닌 항목이 있는지 먼저 확인하고 예기치 않은 첫 번째 항목에 대한 오류 메시지와 함께 중단하고 싶습니다.
지금까지 이와 같은 작업을 수행해야 할 때마다 출력을 변수에 넣고( -quit
with 를 사용하여 find
) 비어 있는지 테스트했습니다.
내 스크립트는 다음과 같습니다.
#! /bin/sh
INTRUDER="$(find "$@" ! -type d -print -quit)"
if [ -n "$INTRUDER" ] ; then
echo "Found non-dir $INTRUDER; leaving the arguments untouched"
exit 1
fi
rm -R "$@"
이보다 다른/더 좋은 방법이 있나요? "더 좋다"는 것은 코드가 더 작고 이식성이 높다는 것(위에서 언급한 이식성 문제가 있는 경우) 등을 의미합니다. "다르다"는 것은 추가 변수를 피하고 그 길이를 테스트한다는 의미입니다.
답변1
이것은 나에게 효과적입니다.
find "$@" ! -type d -exec kill -9 $$ \; -quit && rm -R "$@"
find
정상적으로 종료 되면 (아무것도 발견되지 않음)rm -R "$@"
실행됩니다.- 무언가가 발견 되면
find
현재 쉘/스크립트가 종료됩니다($$
pid가 저장됨). 이 경우 - 부분은rm
절대 실행되지 않습니다.