질문에서 언급한 플래그는 동일하다고 생각하지만 전자에서는 다음과 같은 메시지를 받지만 후자에서는 아무것도 받지 않습니다.
$ 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
명령은 제외하지만 위의 셸 조각은 제외) 가 포함되어 있지 않은 한 .