tl; dr
find ./myfolder -mindepth 1 -maxdepth 1 -type d -not -name test2 \
-exec echo rm -rf '{}' \;
파일 목록에 만족하면 에코를 제거하십시오.
를 사용 -mindepth 1
하면 최상위 디렉토리가 선택되지 않습니다.
$ find ./myfolder -mindepth 1 -type d
./myfolder/test2
./myfolder/test2/one
./myfolder/test2/two
./myfolder/test
./myfolder/test/a1
./myfolder/test/a1/a2
./myfolder/test/a1/a2/a3
그러나이 -not -name test2
됩니다 하지 하위 디렉토리를 내부 피하기 test2
:
$ find ./myfolder -mindepth 1 -type d -not -name 'test2'
./myfolder/test2/one
./myfolder/test2/two
./myfolder/test
./myfolder/test/a1
./myfolder/test/a1/a2
./myfolder/test/a1/a2/a3
그렇게하려면 자두와 같은 것이 필요합니다.
$ find ./myfolder -mindepth 1 -name test2 -prune -o -type d -print
./myfolder/test
./myfolder/test/a1
./myfolder/test/a1/a2
./myfolder/test/a1/a2/a3
그러나 사용하지 않는 delete
것이 있듯이, depth
그 가장 긴 경로에서 삭제하기 시작합니다 :
$ find ./myfolder -depth -mindepth 1 -name test2 -prune -o -type d -print
./myfolder/test/a1/a2/a3
./myfolder/test/a1/a2
./myfolder/test/a1
./myfolder/test
사용하십시오 rm -rf
( echo
실제로 지우려면를 제거하십시오 ).
$ find ./myfolder -mindepth 1 -name test2 -prune -o -type d -exec echo rm -rf '{}' \;
rm -rf ./myfolder/test
rm -rf ./myfolder/test/a1
rm -rf ./myfolder/test/a1/a2
rm -rf ./myfolder/test/a1/a2/a3
또는, 또한 사용 maxdepth
당신이 필요로하는 모든 디렉토리 (그리고 모든 것을 내)을 삭제합니다 (를 제거하는 경우 echo
실제로 지우려면) :
$ find ./myfolder -mindepth 1 -maxdepth 1 -type d -not -name test2 -exec echo rm -rf '{}' \;
rm -rf ./myfolder/test
-delete
디렉토리가 비어 있지 않으면 A 는 여전히 실패합니다.
$ find ./myfolder -mindepth 1 -maxdepth 1 -type d -not -name test2 -delete
find: cannot delete ‘./myfolder/test’: Directory not empty