Linux에서 파일 이름을 지정할 때 특정 특수 문자를 사용하는 것이 맞습니까?


18

그것은 특정 특수 문자로 사용하여 정확 +, &, ', .(점) 및 ,파일 이름으로, 기본적으로, (쉼표).

나는 당신이 사용할 수있는 이해 -_문제없이,하지만 난 다른 기호에 대한 확실한 뭔가를 찾을 수 없었습니다 어떤 연구를하고; 어떤 사람들은 당신이 할 수 있다고 말하고, 어떤 사람들은 할 수 없다고 말하고, 어떤 사람들은 그것들을 사용하는 것이 권장되지 않는다고 말합니다 (무엇이든).


이 파일에 대해 어떤 프로그램을 사용하고 있습니까? 인용 부호가없는 문자열의 쉘과 같이 특수한 방식으로 일부 문자를 해석하는 프로그램 만 문제가 발생합니다. 평균 C 프로그램은 눈을 깜박이지 않고 NUL이 아닌 모든 것을 취합니다.
Anthon

9
"올바른"은 무슨 뜻입니까?
David Richerby

파일 이름에 특수 문자를 사용하는 문제는 그렇게하면 버그가있는 코드 조각이 파일 이름을 잘못 처리 할 가능성이 높아진다는 것입니다. 그러나, 나는 당신이 열거 한 문자 중 어느 것도 문제를 일으킬 가능성이 있다고 생각하지 않습니다. 공백과 관련하여 더 많은 문제가있을 수 있으므로 일반적으로 피해야 합니다. 특히 EOL은 모든 비용을 피해야합니다.

Windows 는 파일 이름에 포함될 수있는 것에 대한 엄격한 제한을 가지고 있으므로 파일을 사용해야 할 경우주의를 기울여야합니다.
evilsoup

답변:


28

+, &, ',와 같은 특정 특수 문자를 사용하는 것이 맞습니까? 기본적으로 파일 이름에서 (점) 및, (쉼표).

예.

정확하지만 반드시 권장되거나 편리하지는 않습니다.

최신 Unix 및 Linux 파일 시스템에서는 파일 이름 내에 null을 제외한 모든 문자/ 를 사용할 수 있습니다 .

ASCII 문장 부호 를 사용할 수 있습니다 . 일부 유틸리티는 생성 한 파일 이름에 마침표 ( dot ) 및 쉼표를 사용합니다.

ASCII 제어 문자를 사용할 수는 있지만 표시 할 수없고 사용하기 어려우므로 사용하지 않는 것이 좋습니다.

ASCII 앰퍼샌드 및 ASCII 아포스트로피와 같은 셸 메타 문자를 사용할 수 있습니다 . 그러나 이것은 불편하며 명령을 구성 할 때 이러한 문자를 인용하거나 이스케이프 처리하는 데 특별한주의를 기울여야합니다.

다양한 인코딩을 사용하여 멀티 바이트 문자 를 사용할 수 있습니다 . 비 ASCII 문자를 올바르게 해석하고 표시하는 것은 쉘 및 / 또는 유틸리티에 달려 있습니다. UTF-8과 같이 널리 사용되는 인코딩으로 제한하고 로케일을 적절하게 설정하는 것이 좋습니다.

당신은해야합니다 적은 문제를 쉘 메타 문자와 하이픈으로 이름을 시작하지하지 않은 사람에 문장 부호 문자의 집합을 제한, ASCII 인쇄 가능한 문자를 사용하여 (또는 정지 - 파일을 숨기려하지 않는 한).


23

다른 사람들이 말했듯이, 현대 유닉스 / 리눅스 시스템에서 파일 이름은 \0(NUL) 및 /(슬래시)를 제외한 모든 문자를 포함 할 수 있습니다 .

그 외에도 POSIX 표준은 파일 이름에 대한 이식 가능한 문자 세트를 정의합니다.

휴대용 파일 이름 문자 세트

이식 가능한 파일 이름을 구성하는 문자 집합입니다.

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
a b c d e f g h i j k l m n o p q r s t u v w x y z
0 1 2 3 4 5 6 7 8 9 . _ -

마지막 세 문자는 각각 <period>, <underscore> 및 <hyphen> 문자입니다. Pathname 도 참조하십시오 .

GNU Coreutilspathchk유틸리티 는 옵션 과 함께 호출 될 때이를 확인하며 , 빈 파일 이름 (유효하지 않지만 인수로 전달 될 수 있음 )과 하이픈 ( )으로 시작 하는 파일 이름에 대해 경고합니다 .-p-Ppathchk-


9

가장 안전한 방법은 운영 체제에 허용되는 문자 집합에 대한 위키 백과 항목을 참조하는 것입니다. 여기 에서 찾을 수 있습니다 .

예를 들어, 대부분의 유닉스 기반 시스템에서 허용되는 문자 세트는 8 비트 세트이고 예약 문자는 널 문자 (NUL, '\0')입니다. 그러나 파일 이름에서 특수 문자를 제거하는 동안 문제가 발생하므로 사용하지 않는 것이 좋습니다.

예를 들어, 파일 이름을 다음 -ramesh.txt과 같이 제거 할 수 있습니다.

rm -ramesh.txt
rm: invalid option -- 'a'
Try `rm ./-ramesh.txt' to remove the file `-ramesh.txt'.
Try `rm --help' for more information.
rm "-ramesh.txt"
rm: invalid option -- 'a'
Try `rm ./-ramesh.txt' to remove the file `-ramesh.txt'.
Try `rm --help' for more information.

파일을 다음과 같이 삭제해야합니다.

rm -- "-ramesh.txt"
rm: remove regular empty file `-ramesh.txt'? y

자세한 내용은 이 답변 에서도 확인할 수 있습니다 .

Linux 및 OS-X /에서는 인쇄 가능한 ASCII 세트 만 금지됩니다. 일부 문자 (와 같은 셸 메타 문자 *?!)는 명령 행에서 문제를 일으키며 파일 이름을 적절히 인용하거나 이스케이프해야합니다.

ext2, ext3과 같은 Linux 파일 시스템은 문자 집합에 구애받지 않습니다 (문자열을 바이트 스트림으로 처리한다고 생각합니다. null 만 가능하며 /금지되어 있습니다). 즉, 파일 이름을 UTF-8 인코딩으로 저장할 수 있습니다. 표시 또는 처리를 위해 파일 이름을 올바르게 변환하는 데 사용할 인코딩을 아는 것은 셸 또는 다른 응용 프로그램에 달려 있다고 생각합니다.

결론적으로 문제는 파일 이름에 특수 문자를 사용하는 것이 아니라 파일 이름을 처리하는 방법에 있습니다.


이런 이유로 ( "그들을 처리하는 방법"), 나는 거의 독점적으로 문자, 숫자, 밑줄 및 마침표 만 사용합니다. (항상 한 번 이상 나타납니다).
phyrfox

19
로 시작하지 옹호 파일 이름에 -있지만 단지 정확히 말하면 : 당신은 확실히이 파일 이름, 2 주위에 따옴표가 필요하지 않습니다 1)) 대신 특별한 사용하여 --정확히 무엇을 할 수 있습니다 인수 rm: 자체 것은 제안 rm ./-ramesh.txt당신이하지 않도록, 필요 그것을 할 당신이 제안한대로 정확하게.
Michał Politowski

@ MichałPolitowski 당신은 따옴표가 필요하지 않을뿐만 아니라 효과가 거의 없습니다.
ctrl-alt-delor

4

당신의 연구는 거의 옳습니다. 파일 이름에 특수 문자를 사용할 수 있지만 이러한 문자는 특별한 의미를 가지므로 권장되지 않습니다. Linux의 파일 이름 지정 규칙은 "파일 이름은 절대 하이픈으로 시작해서는 안됩니다"와 같은 파일 이름에 대한 다른 제한 사항을 설명합니다.

파일 이름에 특수 문자를 사용하여 명령 줄 작업을 수행하는 간단한 입니다.

개인적으로, 파일 이름에 특수 문자를 사용하지 마십시오.이 파일은 처리에 사용될 때 특별한주의가 필요합니다. 따라서 개발 과정에서 특수 문자를 다루는 문제를 제거했습니다.


1
따라서 파일 이름에 -, _.(점) 만 사용하는 것이 좋습니다 .
Chris Klein

@ChrisKlein, 예, 파일 이름의 시작 부분에는 없습니다.
Simply_Me

파일 이름이 아닌 프로그램 (예 : 셸)에 특별한 의미가 있습니다. 파일 이름에 NUL이없는 한 U & L의 거의 모든 프로그램은 문자 를 전혀 신경 쓰지 않습니다 .
Anthon

@Anthon, 예, 링크에 설명 된대로 내 셸.
Simply_Me

2
개인적으로 개발자는 "föλder \ t☃"와 같은 프로젝트의 상위 폴더 이름을 지정하는 개발자를 권장합니다. 따라서 깨진 파일이나 바이너리를 게시하는 대신 파일 이름에서 버그가 발생하면 즉시 알 수 있습니다. 다른 사람들이 해결해야합니다. 'f'로 시작하는 유일한 것이면 문제가되지 않습니다. 셸에서 탭 완성은 입력하기 어려운 항목으로 들어갑니다.
Peteris
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.