현재 디렉토리에서 점으로 시작하는 모든 파일을 삭제하는 방법은 무엇입니까?

현재 디렉토리에서 점으로 시작하는 모든 파일을 삭제하는 방법은 무엇입니까?

저는 Ubuntu 14.04를 사용하고 있으며 터미널에서 sudo su를 사용하여 루트가 되었으며 루트의 정크를 수동으로 삭제하고 싶습니다. 점으로 시작하는 일부 파일을 제외한 모든 파일을 삭제합니다. .htaccess 등과 같습니다. 그래서 해당 디렉터리(예: "files")로 이동하여 다음 명령을 실행합니다.

rm -rf .*

파일은 삭제되었지만 시스템에서 "." 및 ".."을 삭제할 수 없다는 오류 메시지도 표시되었습니다. 무슨 뜻인가요? 전체 디렉토리 트리를 삭제하려고 하면 어떨까요? 내가 말했듯이, 명령을 실행하면 가장 낮은 디렉터리에 있습니다. 정확하게 말하면 /root/.local/share/Trash/files/ 컴퓨터를 껐다가 다시 켰습니다. 언뜻 보면 모든 것이 정상처럼 보입니다. 이제 나는 무엇이 잘못되었는지 묻고 있으며 내가 하고 있는 일이 실제로 시스템에 심각한 손상을 초래하고 있습니까? 즉, 지금 걱정해야 할까요, 아니면 괜찮을까요?

답변1

.*이름이 로 시작하는 모든 파일과 일치합니다 .. 각 디렉터리에는 .디렉터리 자체를 참조하는 파일 과 ..상위 디렉터리를 참조하는 파일이 포함되어 있습니다. .*다음 파일을 포함합니다.

다행히 제거 시도가 .실패하므로 ..무해한 오류가 발생합니다.

zsh에서는 .*일치하지 .않거나 ... Bash에서는 설정할 수 있습니다

GLOBIGNORE='.:..:*/.:*/..'

그러면 *도트 파일을 포함한 모든 파일과 일치하지만 ....

.또는 다음을 명시적으로 제외하는 와일드카드 패턴을 사용할 수 있습니다 ...

rm -rf .[!.]* ..?*

또는

rm -rf .[!.] .??*

또는 find.

find . -mindepth 1 -delete

답변2

모든 도트 파일을 삭제하려면 다음 명령을 사용하는 것이 관례입니다.

rm .??*

이렇게 하면 두 개 이상의 다른 문자가 포함된 점으로 시작하는 모든 파일이 제거되고 그대로 유지 .됩니다 ... 물론 점 뒤에 문자가 하나만 있는 파일 이름도 손실되지만 이런 경우는 드뭅니다.

답변3

find /path/to/dir -type f -name ".*" -delete

답변4

귀하의 목적에 따라 이 오류를 무시할 수 있습니다.

와일드카드 일치를 사용했습니다. 정규식과 혼동하지 마십시오. 으로 끝나는 모든 항목을 삭제하고 아무것도 삭제하지 않거나 그 이후에는 아무것도 삭제하지 않는다고 말합니다.

이제 오류 메시지는 .및 을 포함하기 때문입니다 ... .는 현재 디렉터리의 바로가기이고, ".."는 상위 디렉터리의 바로가기입니다. (기술적으로는 다른 의미이지만 이 대화에서는 작동합니다.)

현재 있는 디렉토리는 삭제할 수 없습니다. 그렇지 않으면 어디에 있습니까? 그리고 상위 디렉터리를 삭제할 수 없습니다. 그렇지 않으면 현재 디렉터리가 해당 디렉터리로 이동됩니다. 이제 그 말은 전적으로 사실이 아닙니다.할 수 있는현재 디렉터리와 상위 디렉터리를 삭제합니다. 하지만 도구 설정(이 경우 rm)은 다소 직관에 어긋나기 때문에 다소 어렵습니다.

무엇이 잘못되었으며 내가 한 일이 실제로 시스템에 심각한 손상을 초래할 수 있습니까?

질문하신 내용을 바탕으로,내 거대답은 그렇습니다. 당신이 뭔가 잘못한 것입니다. 그리고 그렇습니다. 시스템에 꽤 심각한 손상을 입힐 수도 있었습니다.

무엇보다도 높은 권한으로 명령을 실행합니다. 결과를 이미 알고 있는 경우가 아니면 상승된 권한을 사용하여 어떤 작업도 재귀적으로 수행해서는 안 됩니다. 자신이 수행 중인 작업을 정확히 알지 않는 한 상승된 권한이 있는 항목을 삭제해서는 안 됩니다. 다음 번에 그것을 사용하십시오 mv. 이렇게 하면 뭔가를 엉망으로 만든 경우 다시 되돌릴 수 있습니다.

실제로 발생하는 피해, 즉 휴지통을 삭제하는 경우 큰 피해는 아닐 수 있지만 잠재적으로 피해를 입힐 수 있습니다. 특히 높은 권한으로 명령을 실행하는 경우 더욱 그렇습니다.

관련 정보