rm: "." 또는 ".." 디렉토리 삭제를 거부합니다. ".."를 건너뜁니다.

rm: "." 또는 ".." 디렉토리 삭제를 거부합니다. ".."를 건너뜁니다.

..디렉토리에서 삭제 하려고 하면 왜 오류가 발생합니까 ?

rm: refusing to remove '.' or '..' directory: skipping '..'

내가 왜 이 일을 하는지 묻기 전에: 단지 왜냐하면.

답변1

그건및 의 내용 rm도 재귀적으로 제거되는 일부 셸(POSIX 셸 포함)의 버그 기능을 해결하기 위해 대부분의 구현에 보호 장치를 추가했습니다.rm -rf .*...(이것은 Forsyth 쉘 및 pdksh와 같은 파생물에 의해 수정되었으며 zsh최소 fish1입니다.)

(이 버그 기능이 없는 쉘의) 내장 기능을 사용할 수 있습니다 rm.zsh

zmodload zsh/files # to load and enable the builtin version of rm
                   # and a few other utilities
rm -rf ..

또는 BSD, GNU find또는 호환을 사용하여 다음을 수행할 수 있습니다.

find .. -delete

명확하게 말하면 상위 디렉터리(현재 작업 디렉터리 포함)의 내용을 (재귀적으로) 삭제합니다.

현재 디렉터리(일반적으로 최신 시스템)에서 항목의 링크를 해제하려는 경우에는 ..불가능합니다. 해당 항목을 포함하는 디렉터리가 존재하는 한 존재하며 삭제할 수 없습니다 .. ..일부 파일 시스템에서는 가상(디렉토리 파일의 물리적 항목이 아님)이기도 합니다.

이를 삭제하더라도(예: debugfs디렉토리 내용을 수동으로 편집하여) 다음에 파일 시스템 검사가 완료되면 다시 생성되며( fsck) 일부 응용 프로그램(예: cdPOSIX 셸 내장)은 이를 완전히 무시합니다. (현재 디렉토리에 관계없이 현재(cd ..저장된 현재 작업 디렉토리의 끝에서 경로 구성 요소를 제거합니다.) POSIX에서는$PWD....dir/../whatever) 디렉토리와 같은 경로 의 경우 .


1 버전 5.2에는 이 문제를 해결하기 위한 bash옵션이 추가되었습니다 globskipdots.

답변2

당신이 원하는 명령은 다음과 같습니다: 숨김 파일에도 작동하는 rm -rf * 것 같나요 ? rm -rf .*확실하지 않다.

하지만 이 프로그램을 실행하려는 현재 디렉터리에 있는지 확인하세요. 즉, 입력 pwd하거나 echo $PWD확인하려면...

예, 현재 디렉터리의 모든 파일이 삭제됩니다.

rm -rf ../*또한 테스트를 해봤기 때문에 작동할 것이라고 확신합니다 . 필요한 만큼 상위 디렉터리("../")를 추가할 수 있습니다.

따라서 기본적으로 어리석은 보안을 우회하려면 끝에 "splat"을 추가하면 됩니다.

관련 정보