답변:
모든 것을 제거하려면 에서 디렉토리를 제거하지 않고 디렉토리를 입력 :
rm -rfv dontDeleteMe/*
이 /*
부분은 매우 중요합니다. 앞에 공백을 넣으면 *
현재 디렉토리의 모든 파일이 삭제됩니다.
또한, 매우 노는 조심 rm
, -r
와 *
같은 명령의 모든. 그들은 비참한 조합이 될 수 있습니다.
업데이트 : 좋아, 숨겨진 점 파일 (처음에 점이있는 파일 이름, 예 .hidden
)이 있으면 파일이 그대로 유지됩니다.
따라서 원래 질문에 대한 가장 간단한 해결책 은 다음과 같습니다.
rm -rfv dontDeleteMe && mkdir dontDeleteMe
또 다른 방법은 find
의 -exec
옵션이나 파이프를 사용하는 것입니다 xargs
(아래).
find dontDeleteMe/* -print0 | xargs -0 rm -rv
find dontDeleteMe/* -print0 | xargs -0 rm -rv
나는 대부분의 경우 공간에 관계없이 작동하지 않을 것이라고 생각합니다. 그러나 cd로 가서 /tmp/
테스트 디렉토리를 만들고 시도하십시오. :)
rm -rf dontDeleteMe && mkdir dontDeleteMe
디렉토리가 동일한 권한 / 소유자로 다시 작성되도록 보장하지 않습니다. 대신 find dontDeleteMe/ -mindepth 1 -delete
아래 변형 중 하나를 사용하십시오 .
rm -r ./*
항상 작동하지 않는 유일한 이유 는에 일치하지 않는 숨겨진 파일 및 / 또는 폴더를 가질 수 있기 때문 *
입니다.
이를 bash
위해 *
숨겨진 개체까지 모든 항목을 일치 시키는 옵션을 제공하십시오 .
cd dont-delete-me
shopt -s dotglob
rm -r ./*
dotglob
위 명령을 실행 한 쉘을 계속 사용하는 경우 기본 (설정되지 않은) 상태 로 재설정 하는 것이 유용 할 수 있습니다 .
shopt -u dotglob
열린 터미널 ( Ctrl+ Alt+ T) 개미 유형은 다음과 같습니다.
find somedir -mindepth 1 -delete
이것은 모든 파일과 디렉토리 내에서 일치 somedir
하고 (손자) 어린이 "숨겨진"점 파일을 포함하지만 제외 somedir
있기 때문에 그 자체를 -mindepth 1
한 후, -delete
그들을.
find /dontDeleteMe/ -xdev -depth -mindepth 1 -exec rm -Rf {} \;
xdev
장치 경계 내에서만 파일을 삭제 하려면 옵션을 사용하십시오 .
-delete
있습니다. 그것은 의미 -depth
와보다 더 기억하기 쉽다-depth -exec rm -Rf {} \;
"dontdelete"라는 기본 디렉토리를 제외한 모든 파일과 하위 디렉토리를 삭제하려면 (터미널에서) :
rm -rf dontdelete/*
플래그 find
와 함께 사용할 수 있습니다 -delete
.
find dontDeleteMe/* -delete
는 /*
이 이야기로 중요하다 find
"dontDeleteMe"라는 폴더 안에 만 검색 할 수 있습니다.
또한 -delete
플래그가 find
명령 의 끝에 있는지 확인 하십시오 .
dotglob
. 그렇지 않으면 -mindepth 1
flag 옵션을 사용하는 것이 작동하는 유일한 방법 인 것 같습니다.
rm -rf directory/{.*,/*}
뭐라고 :
로 시작하는 모든 파일을 제거하십시오. "디렉토리"및 다른 모든 파일에도.
Neftas가 친절하게 언급했지만 이 솔루션 은 안전하지 않습니다!
보다 안전한 솔루션은 다음과 같습니다.
rm -rf directory/!(.|..)
.
및 ..
디렉토리. 로 변경 {.*}
하면 이 문제를 피할 수 있지만와 {.??*}
같이 한 문자 만있는 숨겨진 파일은 삭제하지 않습니다 .a
.
왜 이것이 그렇게 복잡한 지 잘 모르겠습니다. 틀린 경우 도와주세요.
cd DoNotDeleteDir #<- this is just to make sure we are inside
find . | xargs rm -rf
그게 다야
더 간단한 답변이 있습니다.
cd dontDeleteMe
rm -rf *
기본 시스템 관리 강의 시간 : 이와 같은 스위핑 명령을 사용할 때 현재 위치에주의를 기울이십시오.
나는 충분히 말할 수 없습니다. 누군가가주의를 기울이지 않고 rm -rf *
/에 있는 동안 입력했기 때문에 상자를 복구해야했습니다 .
* nix는 귀하가 루트이거나 루트로 sudoing하는 경우 자신이하는 일을 알고 있다고 가정합니다. 그러기 전에하고있는 일을 알아야합니다.
'rm'을 발행하기 전에 'cd'명령이 작동하는지 확인하는 대안은
cd dontDeleteMe && rm -rf *
cd dontDeleteMe && rm -rf *
&&
운영자는 명령을 함께 연결하지 않습니다. 다음 명령이 실행되기 전에 각 명령이 성공해야합니다. 은 IF cd
명령 (디렉토리가 존재하지 않는, 권한 등) 어떤 이유로 실패 후 rm
명령이 실행되지 않습니다. 나는 그것을 더 안전하게 부를 것입니다.
rm -rf *
어쨌든 달리기 때문에 특히 복잡해 보입니다 .