[linux] 셸에서 하이픈(-)으로 시작하는 파일 삭제하기

리눅스 셸에서는 하이픈으로 시작하는 파일 이름이 특별한 의미를 나타내는 경우가 많습니다.

대부분의 리눅스 커맨드들이 하이픈으로 시작하는 옵션 사용 규칙을 가지고 있기 때문에 하이픈으로 시작하는 파일 이름은 옵션 항목으로 인식됩니다.

파일 제어 명령어인 경우에는 하이픈으로 시작하는 파일 이름을 옵션으로 인식해버리기 때문에 실제로 옵션 뒤에 와야할 파일명이 없다고 인식하게 됩니다.

하이픈으로 시작하는 파일을 삭제하려고 시도하면 다음처럼 에러가 발생합니다. 그리고 친철하게 대체할 수 있는 삭제 방법도 알려주지만 틀린 안내입니다.

apost:/var/www/apostdev/content/images/2023/12# rm -*.*
rm: unrecognized option '--------900px-1.jpg'
Try 'rm ./--------900px-1.jpg' to remove the file '--------900px-1.jpg'.
Try 'rm --help' for more information.

파일 제어를 하는 mv, cp, rename 커맨드 또한 하이픈으로 시작하는 파일 이름에 대해서는 같은 종류의 에러가 발생합니다. 파일 제어를 하는 모든 셸 커맨드에서 공통적으로 발생하는 문제입니다.

apost:/var/www/apostdev/content/images/2023/12# cp --------900px-1.jpg 900px-1.jpg
cp: unrecognized option '--------900px-1.jpg'
Try 'cp --help' for more information.

그래서 리눅스에서는 옵션 표시의 끝을 알리는 지시자가 따로 있습니다. 하이픈 두 개를 연달아 표시("--")하면 옵션 표시의 끝을 알리게 되며 그 뒤에 오는 것은 옵션이 아닌 인자 값으로 처리됩니다.

앞의 파일 삭제 오류는 다음과 같이 삭제 커맨드를 입력하면 됩니다.

apost:/var/www/apostdev/content/images/2023/12# rm -- -*.*

GNU리눅스 계열에서는 모두 "--" 옵션 표시 종료 지시자를 지원합니다.

apost:/var/www/apostdev/content/images/2023/12# ls -al -- --------*.jpg
-rw-r--r-- 1 ghost ghost  78502 Dec 23 05:31 --------900px-1.jpg
-rw-r--r-- 1 ghost ghost 115539 Dec 23 05:31 --------900px-1_o.jpg
-rw-r--r-- 1 ghost ghost  78502 Dec 23 05:28 --------900px.jpg
apost:/var/www/apostdev/content/images/2023/12# rm -- --------*.jpg