디렉토리 구조에서 사용 하고 싶습니다 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
하위 디렉터리에서만 중지되며, 발견된 첫 번째 항목에서는 중지되지 않습니다. -quit
GNU, FreeBSD find
또는 -exit
NetBSD를 사용할 수도 있습니다 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$