find 및 rm -rf, 왜 오류가 인쇄됩니까? [복사]

find 및 rm -rf, 왜 오류가 인쇄됩니까? [복사]

나는 확실히 뭔가 잘못하고 있지만 그것을 알아낼 수 없습니다. rm -rf디렉토리에서 실행 하면 find오류가 발생 No such file or directory하지만 수동으로 실행하면 그런 일이 발생하지 않습니다. 다음 디렉터리 트리를 가정합니다.

[~]$ mkdir -p blueprints/blog
[~]$ find
.
./blueprints
./blueprints/blog

디렉터리를 만들고 여기에 파일을 추가합니다.

[~]$ mkdir ./blueprints/blog/__pycache__ ./blueprints/__pycache__ ./__pycache__
[~]$ touch ./blueprints/blog/__pycache__/dummy.pyc ./__pycache__/dummy.pyc

나는 그것들을 가지고 있다고 확신합니다:

[~]$ find . -type d -name '__pycache__'
./blueprints/blog/__pycache__
./blueprints/__pycache__
./__pycache__

그러나 이를 제거하면 find에서 오류가 인쇄됩니다.

[~]$ find . -type d -name '__pycache__' -exec rm -rf {} \;
find: ‘./blueprints/blog/__pycache__’: No such file or directory
find: ‘./blueprints/__pycache__’: No such file or directory
find: ‘./__pycache__’: No such file or directory

제거됐는데 거기서 무슨 일이 일어났나요?


다르게 수행해도 오류가 발생하지 않습니다.

[~]$ mkdir ./blueprints/blog/__pycache__ ./blueprints/__pycache__ ./__pycache__
[~]$ touch ./blueprints/blog/__pycache__/dummy.pyc ./__pycache__/dummy.pyc
[~]$ find . -type d -name '__pycache__' -exec echo rm -rf {} \; | sh

find가 이 오류를 보고하는 이유는 무엇입니까? 내가 아는 한, 해당 작업이 -exec존재하는 경우 해당 작업이 호출되지 않습니다 -print(이것이 제가 원래 의심했던 것입니다).

find 4.6.0과 find 4.5.11을 사용하여 위의 내용을 복제했습니다.

답변1

디렉토리 삭제를 사용하면 디렉토리를 rm -rf삭제 한 후에도 디렉토리에 들어가려고 시도합니다( 무슨 일을 하는지 find알 수 없음 ). rm여기서 오류가 발생합니다.

이 플래그를 추가해야 합니다 -depth.

~에서POSIX find매뉴얼:

-depth

기본은 항상 true로 평가되어야 하며, 디렉터리 계층 구조를 내림차순으로 실행하여 디렉터리의 모든 항목이 디렉터리 자체보다 먼저 실행되도록 합니다. 홈 디렉터리가 지정되지 않은 경우 -depth디렉터리의 모든 항목은 디렉터리 자체 다음에 작동해야 합니다. 주요 값이 지정되면 -depth해당 주요 값이 일반적으로 평가되지 않더라도 전체 표현식에 적용됩니다.-depth

관련 정보