짧은 답변

짧은 답변

라는 디렉터리를 삭제하려고 합니다 --crm. 내가 할 때

rm -f -R '--crm'

다음 오류가 발생합니다.

rm: illegal option -- -
usage: rm [-f | -i] [-dPRrvW] file ...
   unlink file

나도 시도했다

rm -f -R *crm

그러나 디렉토리는 삭제되지 않습니다.

내가 무엇을 해야 할지에 대한 단서가 있나요?

답변1

솔직히 말해서 이것은 Unix & Linux, Ask Different 또는 SuperUser 등 다른 .SE 중 하나에 더 적합할 것입니다. 그래서 나는 당신이 반대표를 받았다고 생각합니다. 그 의미는...

짧은 답변

대답은 rm -r ./--crm, 또는 더 나은 것은 입니다 rmdir ./--crm.


진짜 대답

OS에서는.

함께 man rm며칠 동안 man bash이러한 개념 중 일부를 읽고 배우십시오.

또한 대부분의 Unix 명령줄 프로그램은 명령 뒤에 오는 특정 매개변수를 사용하여 실행됩니다. 일부는 명백하며 프로그램에 데이터를 전달하여 작동합니다. 예를 들어 를 실행하면 rm myfile커널을 호출하여 파일에 대한 연결 해제기를 실행할 수 있습니다 myfile. 다른 매개변수는 특정 옵션을 켜거나 끄는 스위치 세트처럼 작동합니다. 이는 프로그램 자체의 동작을 제어하기 위해 데이터를 전달하는 대신 "플래그"라고도 합니다. 예를 들어 rm -h아무것도 삭제되지 않지만 유용한 텍스트의 작은 부분이 인쇄됩니다.

따라서 특이한 이름을 가진 파일을 삭제할 때의 문제는 프로그램이 이를 해석하는 방법을 모른다는 것입니다. 문자를 던지는 것도 도움이 되지 않으며 문제가 발생할 수 있습니다.

Bash 사용: 작동하지 않는 이유

Bash(쉘)는 작은 따옴표 안의 내용을 문자 그대로 해석하고 따옴표를 제거하고 내용을 있는 그대로 가져옵니다. 따라서 을 실행하면 rm '--crm'실제로 와 동일한 작업을 실행하게 됩니다 rm --crm. Bash는 *이를 독점적으로 특수 문자로 취급하여 "와일드카드" 작업을 수행합니다. 호출한 프로그램을 실행하기 전에 Bash지정한 각 일치하는 경로 이름으로 매개변수를 확장합니다.. 실제로 디렉터리에

~$ ls
--crm   dummy.txt       file.crm

그런 다음 를 실행하면 rm *crmBash가 먼저 이를 확장한 다음 확장된 버전을 실행합니다.

~$ rm --crm file.crm

...따라서 "crm"으로 끝나는 모든 파일이 삭제될 위험이 있으며 첫 번째 디렉터리를 다시 플래그로 해석합니다.

Bash 사용: 작동 방식

디렉터리를 삭제할 파일로 처리하려면 Bash가 알아야 하며, 알아야 할 모든 것은 rm항상 명시적이고 정규화된 경로 이름이 필요합니다. 위와 같은 대부분의 일반적인 파일에 대해 myfileBash는 일반적으로 현재 작업 디렉터리를 참조하고 있다는 것을 알 만큼 똑똑합니다 cd. 이 문제를 관리하는 데 도움이 되는 두 가지 특별한 역할이 있습니다. cd ..예를 들어, 현재 디렉토리 "위" 디렉토리로 이동합니다. /Users/foobar에 있는 상태에서 를 실행하면 cd ../Users로 이동하게 됩니다. 마찬가지로 현재 디렉터리를 나타내는 문자, 즉 가 있습니다 .. 실행하면 cd .이미 있는 디렉토리로 이동합니다. 별로 좋아 보이지 않죠?

하지만 이는 불행하게도 이름이 지정된 디렉터리가 어디에 있는지 Bash에게 알려주는 방법을 제공합니다. .파일이 현재 디렉터리에 있으므로 --crm이를 지정하고 삭제할 수 있습니다 rm ./--crm. 음, 구체적으로 이것은 디렉터리이므로 rm알려야감소그리고재귀디렉토리를 찾아보고 거기에서 찾은 모든 것을 먼저 삭제하십시오. 플래그를 사용하여 이를 수행 할 수 있습니다 -r. 따라서 rm -r ./--crm.

마지막 경고: 이제 모든 내용을 설명했으므로 달리기의 심각한 위험도 이해하시기 바랍니다 rm -r -f /. -f자신이 무엇을 하고 있는지 알지 못한다면 이 플래그를 절대 사용해서는 안 됩니다.

관련 정보