답변:
이전 답변은 거의 정확합니다. 그러나 쉘 글로브 문자를 사용하려면 인용구를 인용해서는 안됩니다 . 따라서 이것은 당신이 찾고있는 명령입니다.
rm -rf "/target/directory with spaces/"*
*는 큰 따옴표 외부에 있습니다. 이 양식은 다음과 같이 작동합니다.
rm -rf /target/directory\ with\ spaces/*
*
위에 표시된대로 따옴표 가 있으면 *
대상 디렉토리 내에 문자 그대로 명명 된 단일 파일 만 제거하려고 시도합니다 .
세 가지 옵션이 더 있습니다.
사용 find
과 -mindepth 1
및 -delete
:
−mindepth 레벨
레벨 (음이 아닌 정수)보다 낮은 레벨에서 테스트 또는 조치를 적용하지 마십시오.
−mindepth 1은 명령 행 인수를 제외한 모든 파일을 처리 함을 의미합니다.-
삭제 파일을 삭제합니다. 제거에 성공하면 true입니다. 제거에 실패하면 오류 메시지가 발행됩니다. -delete가 실패하면 find의 종료 상태는 0이 아닙니다 (결국 종료 될 때). −delete를 사용하면 −depth 옵션이 자동으로 켜집니다.
이 옵션을 사용하기 전에 -depth 옵션을 사용하여 신중하게 테스트하십시오.
# optimal?
# -xdev don't follow links to other filesystems
find '/target/dir with spaces/' -xdev -mindepth 1 -delete
# Sergey's version
# -xdev don't follow links to other filesystems
# -depth process depth-first not breadth-first
find '/target/dir with spaces/' -xdev -depth -mindepth1 -exec rm -rf {} \;
2. find
디렉토리가 아닌 파일을 사용하십시오 . 이렇게하면 다음을 수행 할 필요가 없습니다 rm -rf
.
# delete all the files;
find '/target/dir with spaces/' -type f -exec rm {} \;
# then get all the dirs but parent
find '/target/dir with spaces/' -mindepth 1 -depth -type d -exec rmdir {} \;
# near-equivalent, slightly easier for new users to remember
find '/target/dir with spaces/' -type f -print0 | xargs -0 rm
find '/target/dir with spaces/' -mindepth 1 -depth -type d -print0 | xargs -0 rmdir
3. 상위 디렉토리를 제거하고 다시 작성하십시오. 하나의 명령으로 bash 함수를 만들 수 있습니다. 다음은 간단한 단일 라이너입니다.
rm -rf '/target/dir with spaces' ; mkdir '/target/dir with spaces'
어때요?
rm -rf /target/directory\ path/*
로 시작하는 파일이있을 수 있습니다. 대상 디렉토리에
rm -rf "/target/directory path/*" "/target/directory path/.??*"
이 초는를 제외하고로 시작하는 모든 항목과 일치합니다. 그리고 .. 그것은 .a와 같은 이름에서 실패 할 것이지만, 흔하지는 않습니다. 필요한 경우 모든 경우를 다루기 위해 조정할 수 있습니다.