`-rf`라는 파일을 제거하려면 어떤 명령을 사용해야합니까?


67

-rf내 파일 시스템 에서 파일을 생성 한 시점에서 미친 짓을했습니다 .
이제 그것을 삭제하는 방법을 알 수 없습니다 ...

난 노력 했어:

rm "-rf"
rm \-rf

이것들은 즉시 종료 됩니다.

누구든지이 파일을 제거하는 방법을 알고 있습니까? 전체 폴더를 실수로 정리하지 않고하는 것이 좋습니다.


33
정확한 구문을 기억하지 않고 시스템에서 rm호출 -rf된 파일에 신경을 쓰는 일부 신경 !
ChristopheD

3
왜 작동하지 않는지 설명하려면 : 따옴표와 이스케이프는 쉘 (일반적으로 bash)에 의해 구문 분석 된 다음 구문 분석 결과가 전달됩니다 rm( argcargv). 따라서 두 배열 모두 ["rm", "-rf"]에 전달됩니다 rm. 당신이 기대하는 것을 수행합니다.
Thanatos

3
나는 이것이 유닉스와 리눅스 stackexchange에서 이것의 복제에 더 가깝다고 생각한다 : unix.stackexchange.com/questions/1519/…
frabjous

12
오래된 개그는 *폴더에 이름이 지정된 파일을 얻는 것 입니다. 이름을 붙인 것도 포함 -rf하고 재미를
보아라

@RBerteig는 : mkdir './-rf '(LS --classify, 쉘 별명에 공통 기본은 / 추가합니다)

답변:


127
unlink -rf

또는

rm -- -rf

47
이는 IMO 배우는 가장 유용한 솔루션입니다 때문에 '-'GNU 도구를 통해 표준화 인수를 처리를 중지합니다
나단 오 설리반

1
좀 더 정확하게 말하면 GNUgetopt 를 사용하는 것은 무엇이든 --최신 리눅스 도구를 의미합니다.
Geoffrey Zheng

60

다른 옵션 :

rm ./-rf

... 현재 디렉토리가 파일이있는 디렉토리라고 가정합니다.


34

또는 디렉토리를 항상 편집하여 파일을 제거 할 수 있습니다.

vim .

그런 다음 파일이있는 줄을 삭제하십시오 (D를 사용하면 dd가 작동하지 않습니다).


5
좋은 트릭! [여러 가지 쓸모없는 문자들]
Sergio Acosta

나는 이것이 오늘 오후에이 답변을 처음 보았을 때의 공감대가 가치가 있다고 생각하지는 않았지만, 그 vim모드가 사라 졌다는 것을 확인할 기회가 없었습니다. 분명히 텍스트 편집기 에서 실제 디렉토리 자체를 편집하는 것은 권장되지 않으며 실제 전문가의 후프 점프 없이는 가능하지 않습니다. 즉 참고 emacs도 작동하고, 같은 이유로 것입니다.
RBerteig

1
똑똑한 Vim 사용을위한 추가 포인트! :)
Pierre-Antoine LaFayette

알아두면 좋은 점)
schöppi

25

이상한 파일 이름을 삭제하는 일반적인 기술은 사용하는 것입니다.

 ls -li

파일의 inode 번호를 찾은 다음 사용하십시오.

find ./ -inum <number of file> -delete

모든 특별한 경우를 기억할 필요가 없습니다.


4
find파일을 삭제할 힘이 있다는 것을 몰랐 습니다.
zneak

또한 상자에서 적절한 GNU 찾기에 액세스 할 수 있으면 알 수없는 이름의 파일 (백 스페이스 문자로 시작하거나 포함하거나 끝에 공백이 있음)을 잡는 데 유용합니다.
Olfan

17

"rm--filename"트릭에 대해 알고 있지만 일반적으로 제거하려는 파일 이름을 가진 파일을 얻는 경우 GUI 파일 관리자를 시작하고 거기서부터 수행하여 기회를 제거합니다. 실수.


1
GUI가 전혀 없을 수 있으므로 작동하지 않을 수 있습니다.
Wuffers

12
그것이 어리 석고 잘못이라면 아마도 공언을받을 가치가 있지만, 나는 그것이 '작동하지 않을 수도 있기 때문에'이 답변을 공의로 믿지 않습니다. 이 제안에는 아무런 해가 없습니다.
JT.WK

4
X가없는 자에게는 항상 자정 사령관 (또는 다른 저주 기반 파일 관리자)이 있습니다.
thomasrutter

9

확실하게하려면 :

 mv -- -rf remove.-rf
 [[check]]
 rm remove.-rf

4

당신이 당신이 석기 시대로 돌아가고 있다고 느끼는 GNU Unix가 아닌 경우 ( --구문 없음 -inum, 찾기 스위치 없음, 연결 해제 명령 없음, 편집자가 디렉토리 편집 등을 거부 함) 여전히 자신을 도울 수 있습니다.

find . -name '-rf' -print | xargs rm -i

이로 인해 find는 잠재적 인 모든 후보자를 rm에게 제공하고 결과적으로는 모든 파일이 공급 될 때마다 허가 / 거부를 ​​요구하게됩니다.

경우 당신은 rm심지어 지원하지 않습니다 -i(PA-RISC에 1.1 사람을 HP-UX 10.2?) 스위치를, 단지 더 조심 :

find . -name '-rf' -print
# check that find's output is exactly and only what you need to delete
find . -name '-rf' -print | xargs rm

시스템에없는 경우 find어떻게 해야 합니까?
Lie Ryan

그것은 실제로 악할 것입니다. 아아, 나는 아직 유닉스 설치를 충족시키지 못했습니다. 포인터 좀 주 시겠어요?
Olfan

약간의 생각을한다면, 내 대답은 serverfault에서 질문 된 것이 더 적절했을 것입니다. 수퍼 유저는 내가 언급 한 것만 큼 고대의 기계를 가지고있을 가능성이 낮습니다. 그리고 그렇게하는 사람들은 스스로 돕는 법을 배웠을 것입니다. ;-)
Olfan

+1, @Olfan, 당신의 방어에서, 지금 막 옷장에서 레거시 유닉스를 만난 사람은 여전히 ​​팁과 요령을 배울 수있는 자료가 필요합니다.
RBerteig

3

jleedev의 답변을 지원 하면 다음과 같이 개선됩니다.

rm -i -- -rf

대화 형 모드로 설정하고 확인을 요청하면 삭제 한 내용을 확실하게 확인할 수 있습니다. (솔루션은 훌륭하지만 마음의 평화를위한 것입니다)

실제로는 다음을 사용하십시오.

\rm -i -- -rf

별칭을 사용하고 있지 않은지 확인하십시오.


2

이미 제안했듯이 항상 구문을 사용했습니다.

rm -rf -- filename

-접두어로 대시가있는 파일을 제거해야 할 때-는 명령에 다른 매개 변수가 아닌 파일 이름 만 검색한다고 명령하기 때문에.

실수로 파일을 삭제하여 중요한 폴더를 보호 하기 위해 * 검색을 해결할 때 일반적으로 파일 목록의 맨 위에 놓이는 단순히 -i 라는 빈 파일을 만드는 데 사용되었습니다 . 그래서 명령

rm -rf *

보호 된 폴더에서 실행되면 명령에서 실행이 중단되어 폭발합니다.

rm -rf -i filename1 filename2 .... (all the other files in the folder)

쉘은 모든 것을 즉시 삭제하지 않고 확인을 요구하지 않습니다 (-i 옵션이 요구하는대로).


-i파일 이름 핵에 + 1- "I"는 회의적이지만 테스트되었습니다!
rymo

2

마지막 으로이 문제가 발생하면 다음과 같이 해결했습니다.

파이썬

수입 OS

os.remove ( "-rf")


1

마틴 클레이튼이 맞아

매우 간단하고 논리적입니다. 옵션이 존재하는 경우는 항상 -XXX또는 --CCCC당신이를 넣으면 이렇게 ./또는 전체 경로가 -rf옵션으로 간주 할 수 없으며 일반 문자열로 간주됩니다.

"모든"이상한 파일 이름으로 작동합니다.

#pwd
/ tmp / 테스트
#touch ./-rf
#ls 
-rf
#rm ./-rf 
#ls
#

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.