find exec mv는 inode(dir)를 찾고 dir의 이름을 변경하지만 "해당 파일 또는 디렉터리가 없습니다"를 반환합니다.

find exec mv는 inode(dir)를 찾고 dir의 이름을 변경하지만 "해당 파일 또는 디렉터리가 없습니다"를 반환합니다.

다음 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 명령줄은 표현식으로 평가되므로 앞에 놓으면 -deletefind가 지정한 시작점 아래의 모든 항목을 삭제하려고 시도하게 됩니다."
  • "나중에 사용하려는 find 명령줄을 테스트할 때 나중에 놀라움을 피하기 위해 -delete이를 명시적으로 지정해야 합니다 -depth."
  • " -delete함축적 의미 때문에 및 을 함께 -depth효과적으로 사용할 수 없습니다 ."-prune-delete

관련 정보