모든 하위 폴더에서 "대상" 폴더를 삭제합니다.

모든 하위 폴더에서 "대상" 폴더를 삭제합니다.

target모든 하위 폴더 중 하나의 폴더를 삭제해야 합니다 .

답변1

그러한 디렉터리가 수천 개를 넘지 않는다는 것을 알고 있다면 다음 명령 설정 및 셸 옵션을 target사용할 수 있습니다.globstardotglobbash

shopt -s globstar dotglob

그런 다음 사용

rm -rf ./**/target/

target그러면 현재 디렉터리 또는 그 아래에 호출된 모든 디렉터리가 삭제됩니다. 후행 슬래시는 매우 중요합니다. 그렇지 않으면 패턴이 디렉터리가 아닌 콘텐츠와 일치할 수 있기 때문입니다.

**모드는 쉘 옵션을 설정하여 활성화되며 globstar하위 디렉터리와 "재귀적으로" 일치합니다. 이것도 설정되어 있으므로 숨겨진 하위 디렉터리 아래에 호출된 디렉터리 dotglob도 찾습니다 target(그렇게 find됩니다).

macOS에서는기본 bash셸 옵션을 지원하기에는 너무 오래되었으므로 다음을 사용하여 globstar최신 버전을 설치해야 할 수도 있습니다.bash스스로 만든, 또는 zsh(현재 새 macOS 사용자 계정의 기본 셸)로 전환합니다.

를 사용하면 zsh다음 명령을 사용하여 이 작업을 수행할 수 있습니다.

rm -rf ./**/target(/D)

이는 (/D)"디렉터리만 일치하고 숨겨진 디렉터리를 포함함"을 의미합니다. glob은 **기본적으로 활성화되어 있습니다 zsh.


그리고 find:

find . -depth -type d -name target -exec rm -rf {} +

target그러면 현재 디렉터리 또는 그 아래에 있는 모든 디렉터리를 찾은 다음 rm -rf한 번의 호출로 가능한 한 많은 디렉터리를 삭제합니다. 이 -depth옵션은 find깊이 우선 검색을 수행합니다(방금 삭제한 디렉토리를 검색하지 않기를 바랍니다).

sh이는 쉘(nothing )을 사용하거나 이와 같은 수천 개의 디렉토리가 있는 경우 **사용할 명령입니다 .

디렉토리가 많더라도 target하나씩 삭제할 수 있습니다.

for dirpath in ./**/target/; do
    rm -rf "$dirpath"
done

find하지만 각 디렉터리에 대해 한 번 호출하므로 사용하는 것보다 속도가 느립니다 .rm

답변2

편집하다:

이 질문에 대한 의견에 따르면 명령의 광범위한 기능을 활용하고 파이프를 완전히 건너뛰는 것이 가장 좋습니다 (또한 삭제를 요청할 디렉터리를 입력하지 말라고 find나와 있습니다 ).findrm

find . -type d -name target -prune -exec rm -r {} +

그것은 당신에게 도움이 될 것입니다.

만족스럽지 못한 답변을 게시하여 여러분께 죄송합니다. 귀하의 피드백은 매우 유익했습니다.


원래 답변:

약간의 구글모든 하위 디렉터리 나열그리고파이프를 rm으로:

find . -type d | grep -E '/target$' | xargs rm -r

작동해야합니다. find . -type d | grep -E '/target$'폴더를 삭제하기 전에 예상한 결과가 나오는지 확인하세요! 후회하는 것보다 저장하는 것이 낫습니다.

관련 정보