플래그를 찾으십시오: -exec rm -rf와 -delete

플래그를 찾으십시오: -exec rm -rf와 -delete

질문에서 언급한 플래그는 동일하다고 생각하지만 전자에서는 다음과 같은 메시지를 받지만 후자에서는 아무것도 받지 않습니다.

$ find . -mindepth 1 -type d -exec rm -rf {} \;
find: `./practice4': No such file or directory
find: `./practice10': No such file or directory
find: `./practice7': No such file or directory
find: `./practice9': No such file or directory
find: `./practice1': No such file or directory
find: `./practice5': No such file or directory
find: `./practice3': No such file or directory
find: `./practice6': No such file or directory
find: `./practice2': No such file or directory
find: `./practice8': No such file or directory

내 추가 질문은: 모든 하위 디렉터리를 삭제하는 더 간단한 코드가 있습니까? 제거 순서는 무작위인가요? 나는 다음을 사용하여 디렉토리를 생성한다.

$ mkdir practice{1..10}

답변1

GNU에서 매뉴얼을 찾으세요:

find' command removes directories, you may find that you get a spurious error message when귀하의 find'가 현재 삭제된 디렉토리로 재귀하려고 시도하는 경우 . "-깊이" 옵션을 사용하면 일반적으로 이 문제가 해결됩니다.

다른 문제:

  • 명령의 단순성은 상황에 따라 다르며, 나열된 경우에는 다음과 같습니다 rm -rf practice*.
  • IIRC에서는 파일이 처리되는 순서가 파일 시스템에 따라 다릅니다.

답변2

토르이 오류가 발생하는 이유와 이를 사용할 때 해결하는 방법이 설명되어 있습니다 find.

쉘 스크립트에서 표현할 수 없는 추가 조건이 없으면 호출할 find의미가 없습니다 . -mindepth 1당신이하고 싶은 일은 다음과 같이 쓸 수 있습니다

rm -rf */

.현재 디렉토리에 이름이 시작하는 디렉토리 ( 일치하지 않음 *) 또는 디렉토리에 대한 심볼릭 링크( find명령은 제외하지만 위의 셸 조각은 제외) 가 포함되어 있지 않은 한 .

관련 정보