rm -rf /some/path/*
이 디렉터리(및 하위 디렉터리)에서 숨겨지지 않은 모든 파일을 삭제합니다.
rm -rf /some/path/.*
해당 디렉터리(하위 디렉터리 제외)의 모든 숨겨진 파일을 제거하고 다음 오류/경고를 표시합니다.
rm: cannot remove directory: `/some/dir/.'
rm: cannot remove directory: `/some/dir/..'
.
및 에 대한 경고/오류를 받지 않고 대상 디렉터리의 숨겨진 파일과 숨겨진 파일 및 폴더를 모두 재귀적으로 삭제하는 올바른 방법은 무엇입니까 ..
?
답변1
*
점이 아닌 모든 파일과 일치하고, 이름이 및 로 시작하는 파일을 제외한 모든 점 파일과 .[!.]*
일치하며 , 을 제외한 모든 파일 과 일치합니다 . 세 가지 패턴 중 하나라도 일치하지 않으면 존재하지 않는 인수에 대해서는 신경 쓰지 않고 자체적으로 확장되므로 실제로는 중요하지 않습니다..
..
..?*
..
.
..
rm -f
rm -rf -- ..?* .[!.]* *
를 사용할 수도 있습니다 find
. 이는 더 복잡하지만 파일이 너무 많아 위 와일드카드가 시스템 명령줄 길이 제한을 초과하는 경우에도 작동한다는 장점이 있습니다.
find . -name . -o -prune -exec rm -rf -- {} +
디렉터리를 삭제하고 다시 만드는 것이 더 명확할 수 있습니다. 이는 다른 프로그램이 동시에 원래 디렉터리에 파일을 생성하더라도 빈 디렉터리가 생성된다는 장점(또는 경우에 따라 단점)이 있습니다.
답변2
언제든지 다음으로 오류 메시지를 보낼 수 있습니다./dev/null
rm -rf /some/path/.* 2> /dev/null
당신은 또한 단지
rm -rf /some/path/
mkdir /some/path/
...그러면 우선 숨겨진 파일에 대해 걱정할 필요가 없습니다.
답변3
이것이 대부분의 Linux 배포판에서 가장 편리한 방법이라는 것을 깨달았습니다.
ls -A1 | xargs rm -rf
어디
-A
= 모든 것을 나열와는 별개로 .
그리고..
-1
= 각 항목을 행에 배치
답변4
이것은 다음과 같아야합니다@길스답변하지만 더 간결합니다.
rm -rf {,.[!.],..?}*
또는
rm -rf dir/to/files/{,.[!.],..?}*
if
안전을 유지하려면 다음을 사용하여 스크립트에 for도 추가해야 합니다.
if [ -d "$DIR" ]; then
rm -rf ${DIR}/{,.[!.],..?}*
fi