그것은 특정 특수 문자로 사용하여 정확 +
, &
, '
, .
(점) 및 ,
파일 이름으로, 기본적으로, (쉼표).
나는 당신이 사용할 수있는 이해 -
와 _
문제없이,하지만 난 다른 기호에 대한 확실한 뭔가를 찾을 수 없었습니다 어떤 연구를하고; 어떤 사람들은 당신이 할 수 있다고 말하고, 어떤 사람들은 할 수 없다고 말하고, 어떤 사람들은 그것들을 사용하는 것이 권장되지 않는다고 말합니다 (무엇이든).
답변
+, &, ‘,와 같은 특정 특수 문자를 사용하는 것이 맞습니까? 기본적으로 파일 이름에서 (점) 및, (쉼표).
예.
정확하지만 반드시 권장되거나 편리하지는 않습니다.
최신 Unix 및 Linux 파일 시스템에서는 파일 이름 내에 null을 제외한 모든 문자/
를 사용할 수 있습니다 .
ASCII 문장 부호 를 사용할 수 있습니다 . 일부 유틸리티는 생성 한 파일 이름에 마침표 ( dot ) 및 쉼표를 사용합니다.
ASCII 제어 문자를 사용할 수는 있지만 표시 할 수없고 사용하기 어려우므로 사용하지 않는 것이 좋습니다.
ASCII 앰퍼샌드 및 ASCII 아포스트로피와 같은 셸 메타 문자를 사용할 수 있습니다 . 그러나 이것은 불편하며 명령을 구성 할 때 이러한 문자를 인용하거나 이스케이프 처리하는 데 특별한주의를 기울여야합니다.
다양한 인코딩을 사용하여 멀티 바이트 문자 를 사용할 수 있습니다 . 비 ASCII 문자를 올바르게 해석하고 표시하는 것은 쉘 및 / 또는 유틸리티에 달려 있습니다. UTF-8과 같이 널리 사용되는 인코딩으로 제한하고 로케일을 적절하게 설정하는 것이 좋습니다.
당신은해야합니다 적은 문제를 쉘 메타 문자와 하이픈으로 이름을 시작하지하지 않은 사람에 문장 부호 문자의 집합을 제한, ASCII 인쇄 가능한 문자를 사용하여 (또는 정지 – 파일을 숨기려하지 않는 한).
답변
다른 사람들이 말했듯이, 현대 유닉스 / 리눅스 시스템에서 파일 이름은 \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 Coreutils 의 pathchk
유틸리티 는 옵션 과 함께 호출 될 때이를 확인하며 , 빈 파일 이름 (유효하지 않지만 인수로 전달 될 수 있음 )과 하이픈 ( )으로 시작 하는 파일 이름에 대해 경고합니다 .-p
-P
pathchk
-
답변
가장 안전한 방법은 운영 체제에 허용되는 문자 집합에 대한 위키 백과 항목을 참조하는 것입니다. 여기 에서 찾을 수 있습니다 .
예를 들어, 대부분의 유닉스 기반 시스템에서 허용되는 문자 세트는 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 인코딩으로 저장할 수 있습니다. 표시 또는 처리를 위해 파일 이름을 올바르게 변환하는 데 사용할 인코딩을 아는 것은 셸 또는 다른 응용 프로그램에 달려 있다고 생각합니다.
결론적으로 문제는 파일 이름에 특수 문자를 사용하는 것이 아니라 파일 이름을 처리하는 방법에 있습니다.
답변
당신의 연구는 거의 옳습니다. 파일 이름에 특수 문자를 사용할 수 있지만 이러한 문자는 특별한 의미를 가지므로 권장되지 않습니다. Linux의 파일 이름 지정 규칙은 “파일 이름은 절대 하이픈으로 시작해서는 안됩니다”와 같은 파일 이름에 대한 다른 제한 사항을 설명합니다.
파일 이름에 특수 문자를 사용하여 명령 줄 작업을 수행하는 간단한 예 입니다.
개인적으로, 파일 이름에 특수 문자를 사용하지 마십시오.이 파일은 처리에 사용될 때 특별한주의가 필요합니다. 따라서 개발 과정에서 특수 문자를 다루는 문제를 제거했습니다.