디렉토리에서 모든 하위 디렉토리를 제거하는 방법은 무엇입니까?

디렉토리에서 모든 하위 디렉토리를 제거하는 방법은 무엇입니까?

이 질문은 제가 게시한 첫 번째 질문의 두 번째 단계입니다.여기

여러 하위 디렉터리, .zip 파일 및 하위 디렉터리에 포함되지 않은 기타 임의 파일이 포함된 디렉터리가 있습니다.

상위 디렉터리의 모든 하위 디렉터리를 삭제하지만 하위 디렉터리에 속하지 않는 모든 zip 파일과 느슨한 파일을 유지하는 명령줄 스크립트를 원합니다. 모든 하위 디렉터리에는 내용이 있으므로 -f 명령을 사용하여 강제로 삭제해야 한다고 생각합니다.

따라서 기본적으로 상위 디렉터리(또는 현재 디렉터리) 내부를 검색하는 명령은 그 안에 있는 모든 폴더를 삭제하지만 폴더가 아니거나 폴더 내에 포함된 다른 모든 콘텐츠와 파일은 그대로 둡니다.

명령줄에서 프로젝트를 삭제하려면 특별한 주의가 필요하다는 것을 알고 있지만 원격 백업을 만드는 데 필요한 모든 예방 조치를 취했습니다.

답변1

BASH에서는 후행 슬래시(I생각하다모든 POSIX 셸에서 작동합니다):

rm -R -- */

옵션과 인수를 분리하고 하이픈으로 시작하는 항목을 제거할 수 --있습니다. 그렇지 않으면 항목 이름이 쉘 확장 후 옵션으로 해석됩니다 rm(다른 많은 명령줄 유틸리티에서도 마찬가지입니다).

-f쓰기 불가능한 파일을 삭제할 때 확인 메시지를 표시하지 않으려면 이 옵션을 추가하세요.

기본적으로 숨겨진 디렉터리(이름이 로 시작하는 디렉터리 .)는 유지됩니다.

중요한 경고:의 확장에는 */궁극적으로 파일 형식을 확인하는 기호 링크도 포함됩니다.목차. rm구현 에 따라 rm -R -- thelink/심볼릭 링크만 제거되거나 (대부분의 경우)콘텐츠연결된 디렉터리에 재귀적으로 액세스하지만 디렉터리 자체나 기호 링크에는 액세스하지 않습니다.

사용하는 경우 zsh더 나은 접근 방식은 다음을 사용하는 것입니다.글로벌 예선디렉토리 유형의 파일만 선택하십시오.

rm -R -- *(/) # or *(D/) to include hidden ones

또는:

rm -R -- *(-/)

디렉토리에 대한 기호 링크를 포함합니다(그러나 이 확장에는 후행 s가 없기 때문에 /모든 구현에서 기호 링크만 제거됩니다 rm).

bash, AT&T 또는 다음을 통해 ksh다음을 수행할 수 있습니다 yash.zsh

set -- */
rm -R -- "${@%/}"

후행 항목을 제거하십시오 /.

답변2

와일드카드 접근 방식 대신 다음 find을 사용하여 이 작업을 수행할 수 있습니다(적어도 GNU 찾기).

find -mindepth 1 -maxdepth 1 -type d -print0 | xargs -r0 rm -R

다른 find줄과 마찬가지로 첫 번째 부분( find -mindepth 1 -maxdepth 1 -type d)을 실행하면 제거될 디렉터리 목록을 볼 수 있습니다.

이식 가능하게 (POSIXly) -exec cmd {} +대신 구문을 사용 -print0 | xargs -r0하고 -prune깊이를 제한할 수 있습니다.

find . ! -name . -prune -type d -exec echo rm -R {} +

( echo실제로 수행하기 위해 제거되었습니다).

더 안전한 옵션(여기서도 GNU를 가정 mv)은 다음을 수행하는 것입니다.

find -mindepth 1 -maxdepth 1 -type d -print0 | xargs -r0 mv -i -t ../to-rm
# or (but beware of symlinks!)
mv -i -t ../to-rm -- */
# or
mv -i -- */ ../to-rm

../to-rm둘 중 하나는 삭제하는 대신 모든 것을 이동합니다 . rm -Rf원하는 대로 작동하는지 여가 시간에 확인할 수 있습니다 .

답변3

이러한 제안 중 일부(특히)에 대한 스크립트를 생성하여 rm -R -- *//usr/local/bin 폴더에 저장하거나 alias~/.bashrc 파일에 생성할 수 있습니다. 그렇기 때문에그래서명령을 잘못 입력하여 시스템을 손상시키기 쉽습니다. 단일 문자 및/또는 알파벳 순서라도 재앙적인 결과를 초래할 수 있습니다. 이는 작업을 수행할 때마다 다른 옵션과 매개변수를 입력하는 것보다 더 신뢰할 수 있는 솔루션입니다.

또한 실수로 삭제되는 것을 방지하는 또 다른 도구 역할을 하는 -i or --interactive=once또는 옵션을 스크립트/명령에 포함할 수 있습니다.-I or --interactive=always

또한 다음과 같은 것데로베르트가 제안하다가장 좋을 것입니다. 스크립트를 파일/터미널 편집기에 복사/붙여넣고 특정 요구에 맞게 조정하면 파일/디렉토리가 디렉터리로 이동됩니다(내용을 검사/확인할 수 있음). 간단히 디렉터리를 삭제할 수 있습니다. rm -rf명령을 실행하여 .

또 다른 옵션은 파일 관리자와 같은 GUI 애플리케이션을 사용하고 삭제하려는 해당 파일/폴더를 모두 선택하는 것입니다. 권한이 없으면 배포판의 매뉴얼 페이지를 확인하십시오.

마지막으로 폴더가 비어 있는 경우(기본적으로 단순한 파일 이름) 이 rmdir명령을 사용하여 삭제할 수 있습니다. 삭제하려는 모든 항목에서 작동하지 않지만 때로는 "정리"를 수행하려는 경우 유용합니다. **이 -p --ignore-fail-on-non-empty옵션을 사용하면 특정 하위 디렉터리와 해당 하위 디렉터리의 빈 "상위 디렉터리"(해당 디렉터리가 있는 디렉터리)를 삭제할 수 있습니다.

답변4

홈 디렉토리도 삭제하려는 경우. 다음 명령을 시도해 보십시오:

rm -rf <directory name>

상위 디렉터리를 그대로 유지하고 해당 내용을 모두 삭제하려면 다음을 수행하세요.

enter code here

관련 정보