다음 find-exec(mv)
명령은 say라는 디렉터리를 찾아 prog-3.6.9-stable-gnu
성공적으로 이름을 변경합니다. 그러나 명령은 다음도 반환합니다.
찾기: './prog': 해당 파일이나 디렉터리가 없습니다.
이것은 명령입니다:
find ./ -type d -name 'prog-*' -exec mv {} prog \;
find-exec(rm)
디렉토리가 다음과 같은 경우 비슷한 결과를 얻습니다.
find 명령이 온다고 가정하면앞으로exec unzip 작업 중(또는 exec rm -rf ) 왜 이 표준 오류가 있는지 묻고 싶습니다. 내 말은, 파일이 발견되어 변경되면 왜 stderr이 "해당 파일이나 디렉터리가 없습니다"가 될까요?
답변1
이 오류는 " " 폴더를 이동하는 중이기 때문에 발생합니다 prog-*
.
실제 동작 find
은 다음과 같습니다.
find
먼저 디렉터리 자체를 분석한 다음 해당 내용을 분석합니다.
따라서 find
귀하의 예에서는 다음과 같습니다.
1.발견하다목차 prog-3.6.9-stable-gnu
2.이름 바꾸기
3. 액세스를 시도합니다. 4. 이제 폴더를 찾을 수 없기 때문에 오류를 반환합니다 prog
.prog-3.6.9-stable-gnu
prog-3.6.9-stable-gnu
찾다디렉토리를 먼저 구문 분석한 다음 그 내용을 구문 분석하는 순서를 "너비 우선 탐색"이라고 합니다. 그 반대는 "깊이 우선 탐색"입니다. -depth
호출하는 옵션이 있습니다 . -depth
언급된 내용을 읽어보면 흥미롭습니다.매뉴얼 페이지찾다(1).
- "
-depth
: 디렉터리 자체보다 먼저 각 디렉터리의 내용을 처리합니다." - "
-delete
움직임은 또한 다음을 의미합니다-depth
." - "find 명령줄은 표현식으로 평가되므로 앞에 놓으면
-delete
find가 지정한 시작점 아래의 모든 항목을 삭제하려고 시도하게 됩니다." - "나중에 사용하려는 find 명령줄을 테스트할 때 나중에 놀라움을 피하기 위해
-delete
이를 명시적으로 지정해야 합니다-depth
." - "
-delete
함축적 의미 때문에 및 을 함께-depth
효과적으로 사용할 수 없습니다 ."-prune
-delete