디렉토리를 삭제하지 않고 디렉토리의 모든 파일과 하위 디렉토리를 제거하는 명령이 있습니까?
예를 들어 하위 디렉토리가 “1”, “2”, “3”인 “dontDeleteMe”디렉토리가 있고 각 하위 디렉토리에 사진이 몇 개있는 경우 하위 디렉토리 “1”, “2”및 “3”을 제거하는 방법 부모 디렉토리 “dontDeleteMe”를 제거하지 않고 그 안에있는 모든 파일?
답변
모든 것을 제거하려면 에서 디렉토리를 제거하지 않고 디렉토리를 입력 :
rm -rfv dontDeleteMe/*
이 /*
부분은 매우 중요합니다. 앞에 공백을 넣으면 *
현재 디렉토리의 모든 파일이 삭제됩니다.
또한, 매우 노는 조심 rm
, -r
와 *
같은 명령의 모든. 그들은 비참한 조합이 될 수 있습니다.
업데이트 : 좋아, 숨겨진 점 파일 (처음에 점이있는 파일 이름, 예 .hidden
)이 있으면 파일이 그대로 유지됩니다.
따라서 원래 질문에 대한 가장 간단한 해결책 은 다음과 같습니다.
rm -rfv dontDeleteMe && mkdir dontDeleteMe
또 다른 방법은 find
의 -exec
옵션이나 파이프를 사용하는 것입니다 xargs
(아래).
find dontDeleteMe/* -print0 | xargs -0 rm -rv
답변
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
장치 경계 내에서만 파일을 삭제 하려면 옵션을 사용하십시오 .
답변
“dontdelete”라는 기본 디렉토리를 제외한 모든 파일과 하위 디렉토리를 삭제하려면 (터미널에서) :
rm -rf dontdelete/*
답변
플래그 find
와 함께 사용할 수 있습니다 -delete
.
find dontDeleteMe/* -delete
는 /*
이 이야기로 중요하다 find
“dontDeleteMe”라는 폴더 안에 만 검색 할 수 있습니다.
또한 -delete
플래그가 find
명령 의 끝에 있는지 확인 하십시오 .
답변
rm -rf directory/{.*,/*}
뭐라고 :
로 시작하는 모든 파일을 제거하십시오. “디렉토리”및 다른 모든 파일에도.
Neftas가 친절하게 언급했지만 이 솔루션 은 안전하지 않습니다!
보다 안전한 솔루션은 다음과 같습니다.
rm -rf directory/!(.|..)