"rm -rf *" 명령이 디렉토리의 모든 파일을 삭제하지 않는 이유는 무엇입니까? [반복하다]

"rm -rf *" 명령이 디렉토리의 모든 파일을 삭제하지 않는 이유는 무엇입니까? [반복하다]

대부분의 파일은 사라졌지만 여전히 다음 두 가지 파일만 남아 있습니다.

".RData" 및 ".Rhistory"

왜 그럴까요? 저는 R을 사용하고 있지만 이 파일들이 무엇인지 모릅니다.

나중에 sudo를 사용하지 않고 개별적으로 삭제할 수 있습니다.

답변1

*보이는 파일만 포함됩니다. 이러한 항목과 숨겨진 항목을 제거하려면 다음을 사용하십시오.

rm -rf * .*

그룹 주문 옵션

Bash를 사용하면 이 동작을 변경하고 파일 숨기기를 해제할 수 있습니다. 이를 설명하기 위해 하나는 숨겨져 있고 다른 하나는 숨겨져 있는 두 개의 파일을 만들어 보겠습니다.

$ touch unhidden .hide1
$ ls *
unhidden

보시다시피 숨김 해제된 항목만 표시됩니다 ls *. 이제 dotglob옵션을 설정해 보겠습니다 .

$ shopt -s dotglob
$ ls *
.hide1  unhidden

이제 두 파일이 모두 나타납니다. 물론 원한다면 dotglob을 끌 수도 있습니다:

$ shopt -u dotglob
$ ls *
unhidden

문서

에서 man bash:

경로 이름 확장에 패턴이 사용되는 경우 쉘 옵션 dotglob이 설정되지 않은 한 이름 시작 부분이나 슬래시 바로 뒤의 "." 문자가 명시적으로 일치해야 합니다. 경로 이름을 일치시킬 때 슬래시 문자는 항상 명시적으로 일치해야 합니다. 다른 경우에는 "." 문자가 특별하게 처리되지 않습니다. nocaseglob, nullglob, fallglob 및 dotglob 셸 옵션에 대한 설명은 아래 SHELL BUILTIN COMMANDS 아래의 shopt 설명을 참조하세요.

다시 말해서,경로명 확장.이름이 로 시작하는 파일은 명시적으로 지정 하지 않는 한 무시됩니다 ..

보안 질문

예상치 못한 상황을 피하기 위해 현재 디렉터리 와 상위 디렉터리 삭제는 명령줄에 지정하더라도 rm거부됩니다 ....

$ rm -rf .*
rm: refusing to remove ‘.’ or ‘..’ directory: skipping ‘.’
rm: refusing to remove ‘.’ or ‘..’ directory: skipping ‘..’

답변2

그런 다음 디렉토리가 올바른지 확인하십시오.

sudo rm -rf * .*

관련 정보