-delete
-depth
작동하지 않는 것을 의미 합니다 -prune
( -depth
잎으로 시작). GNU 버전 매뉴얼에 경고가 있습니다 ( -delete
현재는 GNU find
및 기타 구현 에서도 FreeBSD 확장이 지원됩니다 ).
info find --index-search=-delete
명령 행에서 '-delete'조치를 사용하면 '-depth'옵션 (* note find Expressions : :)이 자동으로 켜집니다. 이전에 '-print'를 사용하여 테스트 한 경우에는 놀라 울 수 있으므로 일반적으로 '-depth'를 명시 적으로 사용하는 것이 가장 좋습니다.
info find --index-search=-prune
'-delete'는 '-depth'를 의미하므로 '-delete'와 함께 '-prune'을 사용하면 의도 한 것보다 많은 파일이 삭제 될 수 있습니다.
여기에 rm
대신 사용하는 옵션이 있습니다 .
find . -name save -prune -o -type f -exec rm -f {} +
( 다른 사람이 쓸 수있는 디렉토리가있는 경우 잠재적으로 안전하지 않습니다. 명령을 실행하는 동안 디렉토리를 심볼릭 링크로 바꾸어 현재 디렉토리 트리 외부의 파일을 삭제할 수 있습니다).
더 안전한 대안 :
find . -name save -prune -o -type f -execdir rm -f -- {} \;
위에서 언급 한 문제는 없지만 rm
파일 당 하나를 실행하는 것을 의미 합니다. 는 --
FreeBSD의 구현이 아닌 GNU 하나 그 접두사 파일 이름이 필요합니다 ./
.
또는 Costas가 제안한대로 :
LC_ALL=C find . ! -name save ! -path '*/save/*' -type f -delete
(그러나 여전히 불필요하게 save
디렉토리 로 내려갑니다 )
는 LC_ALL=C
너무가 *
바이트의 순서를 (심지어 현재 로케일에 유효한 문자를 형성하지 않는 것)과 일치합니다. 오류 메시지의 언어 (사용자의 언어 대신 영어)에 영향을 미칩니다.
mv save/ ../some/safer/location
"일반적인"delete 명령 이전에 간단한 것을 추천합니다 . 이제 파일이있는 파일 시스템에 대해 좋은 "삭제 취소"를 찾으십시오. ^^