처음 발견되면 반환 코드로 종료

처음 발견되면 반환 코드로 종료

디렉토리 구조에서 사용 하고 싶습니다 find. 대상 조건을 가진 파일이 하나 이상 존재하면 종료하십시오. 이렇게 하면 나머지 쉘 스크립트가 실패하게 됩니다.

이 쉘 스크립트는 대규모 디렉토리 구조에서 실행되도록 설계되었으므로 가능한 한 빨리 종료하고 싶습니다.

예를 들어 다음을 수행하고 싶습니다.

find . -name "test" -prune
# if "test" file found, just exit immediately
if [ $? -eq 0 ] ; then
    echo error... >&2
    exit 2
fi
...continuation of shell script

하지만 -prune항상 true로 평가됩니다.

find이 단락을 달성하기 위해 표현식을 작성하는 보다 효율적인 방법은 무엇입니까 find?

나는 가능한 한 표준 Bourne 쉘 구성을 사용하고 임시 파일의 사용을 피하고 싶습니다.

답변1

재귀 는 -prune하위 디렉터리에서만 중지되며, 발견된 첫 번째 항목에서는 중지되지 않습니다. -quitGNU, FreeBSD find또는 -exitNetBSD를 사용할 수도 있습니다 find.

$ find . -name test 
./test
./Y/test

$ find . -name test -print -quit
./test

find반환 코드를 테스트하는 대신 출력을 테스트할 수 있습니다.

files=$(find . -name "test" -print -quit)

if [ -n "$files" ]
then
  echo "error... found $files" >&2
  exit 2
fi

답변2

find . -name "test" |grep -m1 /test$

관련 정보