컴파일 된 모든 데이터를 삭제해야합니다.
- 라는 디렉토리
build
, - 라는 디렉토리
obj
, - * .so 파일.
나는 명령을 썼다
find \( -name build -o -name obj -o -name *.so \) -exec rm -rf {} \;
모든 디렉토리를 재귀 적으로 살펴보고 필요한 모든 것을 삭제합니다.
마지막에 왜 그런 출력이 있습니까? 다른 명령을 작성해야 할 수도 있습니다.
find: `./3/obj': No such file or directory
find: `./3/build': No such file or directory
find: `./1/obj': No such file or directory
find: `./1/build': No such file or directory
find: `./2/obj': No such file or directory
find: `./2/build': No such file or directory
답변
-prune
어쨌든 삭제할 디렉토리 find
에서 파일을 찾으려고 귀찮게하지 말라고 사용하십시오 .
find . \( -name build -o -name obj -o -name '*.so' \) -prune -exec rm -rf {} +
또한주의 *.so
그렇지 않으면 목록에 쉘에 의해 확장 될 수 있으므로 필요에 인용되는 .so
현재 디렉토리에있는 파일.
GNU -regex
유형 과 동등한 것은 다음과 같습니다 .
find . \( -name build -o -name obj -o -name '*?.so' \) -prune -exec rm -rf {} +
GNU 특정 구문을 사용하려는 경우 -delete
대신 대신 사용할 수도 있습니다 -exec rm -rf {} +
. 를 사용 -delete
하면 GNU find
가 -depth
자동으로 켜집니다 . 외부 명령을 실행하지 않으므로 더 효율적이며 시간 사이에 디렉토리를 심볼릭 링크로 변경하여 누군가 잘못된 파일을 제거 할 수있는 경쟁 조건을 제거하므로 더 안전합니다. find
파일을 찾아서 rm
제거합니다 ( info -f find -n 'Security Considerations for find'
자세한 내용 참조).
find . -regextype posix-egrep -regex '.*/((obj|build)(/.*)?|.+\.so)' -delete
답변
그 이유는 find
디렉토리 트리를 먼저 삭제하고 가능한 최선의 순서가 아닌 디렉토리 내용을 확인하려고하기 때문입니다. find
먼저 내용을 확인 하도록 할 수 있습니다 .
find . -depth ...
-delete
파일 및 -exec rmdir
디렉토리 사용 을 고려해야 합니다 .
답변
내 솔루션.
find . -regextype posix-egrep -regex ".*/(obj|build|.+\.so)" -prune -exec rm -rf {} +