:~
실수로 bash 쉘에 파일 이름을 만들었습니다.
scp foo :~
어떻게 삭제하나요?
답변1
시도 rm ':?'
하거나 rm ":?"
또는rm :\?
주로 작은따옴표나 큰따옴표로 파일 이름을 인용해야 합니다. 또는 파일 이름에 포함된 특수 문자를 이스케이프하세요.
셀 수 있는 특수 문자는 다음과 같습니다.
*
|
$
&
#
<>
;
space/tab/newline
\
brackets/parenthesis/braces
'"`
?
etc
이름이 잘못된 파일이 삭제되는 것을 방지하려면 또는 를 my_file
사용하는 대신 작은따옴표를 사용하는 것이 좋습니다 . 작은 따옴표 문자는 Bourne과 같은 쉘에서 작은 따옴표로 묶을 수 없는 유일한 문자이지만 다음과 같이 항상 and 자체를 사용하여 파일 이름의 나머지 부분을 인용할 수 있습니다.$file
rm $file
rm "$file"
file='my_file'
'...'
'
\'
rm -- '-$#~<>'\''"*?[]{}'`
이것은 -
쉘에 특별한 것은 아니지만 rm
인수의 시작 부분에서 발견되면 옵션으로 처리된다는 점에서 특별합니다. 이는 나중에 인수가 로 시작하더라도 옵션으로 간주되지 않도록 --
지시합니다 .rm
-
답변2
일반적으로 이상한 이름의 파일을 삭제하고 싶을 때마다 --
옵션의 끝을 나타내는 태그를 사용해 볼 수 있습니다. 이 플래그 이후의 모든 항목은 위치 인수로 처리됩니다. (또한보십시오:"--"(이중 대시)은(는) 무슨 뜻인가요?)
그래서 그건
rm -i -- :?
(@Doug O'Neal이 제안한 대로 이 -i
옵션은 삭제하기 전에 올바른 파일을 삭제하고 있는지 확인하라는 메시지를 표시합니다.)
그러나 이 경우 ?
쉘은 이를 전역 문자로 확장합니다. 따라서 위의 방법은 작동하지 않습니다.
이 경우 쉘의 자동 완성 기능을 사용할 수 있습니다. 이상한 이름의 파일이 있는 디렉토리로 이동하여 rm :
(을 누르지 않고 Enter)를 입력한 다음 키를 눌러 Tab현재 디렉토리의 모든 파일을 순환합니다. 이상한 이름을 가진 파일은 올바르게 참조됩니다.