[unix] 이름이 “-“(하이픈, 일명 대시 또는 빼기)로 시작하는 파일을 어떻게 삭제합니까?

파일 이름이 대시 (하이픈 또는 빼기)로 시작하는 파일을 어떻게 제거 -합니까? 원격 OSX 서버에 ssh’d이고 내 디렉토리에이 파일이 있습니다.

tohru:~ $ ls -l
total 8
-rw-r--r--    1 me  staff  1352 Aug 18 14:33 --help
...

--helpCLI에서 세계를 어떻게 삭제할 수 있습니까? 이 문제는 때때로 다른 형태로 나타나는 문제입니다. 이러한 파일은 작성하기 쉽지만 제거하기는 어렵습니다.

백 슬래시를 사용해 보았습니다.

rm \-\-help

나는 따옴표를 시도했다

rm "--help"

빼기 (대시 또는 하이픈) 문자가 옵션으로 해석되지 않도록하려면 어떻게해야합니까?



답변

“-“를 사용하여 다음과 같이 rm 구문 분석 명령 행 옵션을 작성하십시오.

rm -- --help


답변

아니면 할 수 있습니다

rm ./--help


답변

find그것을하기 위해 사용하십시오 :

find . -name '--help' -delete

그리고 이것은 당신이 삭제할 수있는 이와 같은 몇 개 이상의 파일이있는 -delete경우 먼저 옵션 없이 find를 실행하여 파일의 미리보기 목록을 얻을 수 있고 파일 목록이 좋아 보이는 경우 실행됩니다 와 함께 다시 -delete.

사실, 당신 rmfind(특히 미리보기 를 선호) 선호 하지 않는 rm *것은 언젠가는 당신을 물린 실수를 피하는 데 도움이되는 좋은 습관 입니다.

그러나 find는 모든 서브 디렉토리를 통해 재귀하므로, 다음과 같은 서브 디렉토리 깊이 제한 조건으로이를 실행할 수 있습니다.

find . -maxdepth 1 -name '--help' -delete

현재 디렉토리로 찾기를 제한합니다.


답변

Vegar Nilsen과 edfuh의 답변은 매우 좋으며 이와 같은 문제에 대한 적절한 해결책입니다.

난 당신이 삭제할 수 있습니다이 질문에 일반적인 응답을 추가하고 싶어 어떤 어려운 파일 이름으로 파일을. 먼저 inode 번호는 ls -i형식 또는 형식을 사용하여 얻은 stat다음 현재 디렉토리에서 inode 번호로 rm파일을 검색하고 일치하는 inode 번호로 파일 에서 명령을 실행 하여 파일을 제거합니다.

find . -inode <inode> -exec rm {}\;

inode 번호는 각 파일 시스템마다 고유하므로이를 사용하여 모든 파일을 제거 할 수 있습니다. 유니 코드 또는 이스케이프 문자 사용 입력하는 것이 매우 성가신 일이므로 줄을 추가하는 것이 좋습니다.

TAB: menu-complete             # Tab: Cycles through the command
"\e[Z": menu-complete-backward # Shift-Tab: Cycles backwards

.inputrcbash를 사용하는 경우 파일 에 넣으십시오 . 이를 통해 가능한 완료 목록 을 자세히 볼 수 있습니다 ( 자세한 내용은 ).


답변

잔인한 해결책 :

perl -e "unlink '--help' or die 'Could not unlink.';"

perl -e "rmdir '-d' or die 'Could not rmdir.';"


답변

Linux 대시와 공백이있는 파일을 만든 다음 제거하는 연습.

조심해! 실수로 rm -rf /유사한 캐스케이드 삭제 명령을 실행하지 마십시오 .

제거하려는 파일이 별표 (*) 또는 슬래시가 포함 된 경우, 실수로 펌프하지 않는다 .거나 /*또는 *운영 체제를 삭제 계단식 수 또는 다른 와일드 카드.

“–yo yo”라는 파일을 만듭니다.

eric@dev ~ $ touch -- "--yo yo"
eric@dev ~ $ ls
bin  --yo yo

먼저 찾기로 찾으십시오.

eric@dev ~ $ find . -name "*--yo yo*"
./--yo yo

find 명령 만 삭제하려는 하나의 파일 만 찾습니다.

그런 다음 -delete 옵션을 전달하여 찾으십시오.

eric@dev ~ $ find . -name "*--yo yo*" -delete
eric@dev ~ $ ls
bin  

Aaaannd 사라졌습니다.


답변

자정 사령관 ( mc)이 가장 쉬운 방법입니다. 겨냥하고 F8을 누르십시오.)