target
모든 하위 폴더 중 하나의 폴더를 삭제해야 합니다 .
답변1
그러한 디렉터리가 수천 개를 넘지 않는다는 것을 알고 있다면 다음 명령 설정 및 셸 옵션을 target
사용할 수 있습니다.globstar
dotglob
bash
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
나와 있습니다 ).find
rm
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$'
폴더를 삭제하기 전에 예상한 결과가 나오는지 확인하세요! 후회하는 것보다 저장하는 것이 낫습니다.