Linux / Windows / Unix /… 파일 이름 : 어떤 문자를 사용할 수 있습니까? 이스케이프 처리되지 않은 것은 무엇입니까?


43

다른 운영 체제의 명령 행에서 어떤 문자가 허용되고 어떤 문자가 이스케이프되어야합니까?


아래에 유용한 답변이 있지만 달성하려는 것은 무엇입니까? 자신의 캐릭터 화이트리스트 루틴을 코딩하는 것이 가장 좋은 방법은 아닙니다.
medina

모두에게 감사 드려요! 모든 답변이 도움이됩니다. 내가 필요한 정보는 파일 시스템에서 파일 이름을 변경하여 메타 데이터가없는 파일을 태그하는 도구를 작성하는 것입니다.
java.is.for.desktop

수퍼 유저에 대한 답변도 참조하십시오 .
pevik

답변:


26

Wikipedia 기사에서 File Names 에 대한 파일 이름 문자에 대한 토론이 있습니다 .

이 에세이 정보는 Fixing Unix / Linux / POSIX Filenames에서 찾을 수 있습니다 .

이 기사는 OS X와 ​​Windows XP : X 대 XP : 파일 이름의 금지 된 문자를 비교합니다 (PDF, pp 약 64-66 참조).

1,000 달러에 파일 이름에 포함되지 않아야 할 사항 Alex

내가해야하는 문자를 모르는 유엔이 적어 주며,하지만 리눅스에서, 아마도 예 : "N"(줄 바꿈)으로 특별한 의미가있는 문자, "t"(탭)와 다른 사람을 탈출하는 좋은 생각이 아니다, 그러나 이것은 일반적으로 파일 작업에서 문제가되지 않습니다. 아마도 당신은 "탈출"보다는 "탈출"을 의미 할 것입니다. 가장 일반적인 것들은 공간, ">", "<"등과 같이 쉘이 해석 할 것입니다. 그것들에 대한 논의를 위해 링크 된 기사 중 일부를보십시오.


7
이것은 실제로 답이 아닙니다. 모든 정보는 외부에 있습니다. 그리고 그 링크 중 일부는 현재 끊어졌습니다.
Steve Bennett

26

* nix에서 파일 이름에 허용되지 않는 유일한 문자는 NUL/입니다. Windows에서 유일한 NUL, :그리고 \진정으로 허용하지만, 많은 앱이 더도 방지하는 것을 제한하지 않는 ?, *, +,와 %.

어떤 시점에서 파일 이름에 모든 문자 할 필요가 쉘에 의해 해석되지하기 위해 요구되는 경우를 제외하고 탈출 할 수 있습니다.


두 번째 요점은 강조 할 가치가 있습니다. 일반적으로 "이스케이프"는 사용자가 쉘이 특별한 방식으로 처리 할 문자가 포함 된 문자열 (예 : 경로 이름)을 지정할 수있는 쉘 메커니즘을 나타냅니다. OP가“허용되지 않은 문자를 인코딩하기 위해“백분율 인코딩”과 같은 것을 사용하는 것을 의미한다면, 이는 각 관련 프로그램이 채택해야하는 (또는 그렇지 않은) 순전히 응용 프로그램 수준의“경로 이름 프로토콜”입니다.
Chris Johnsen 2012 년

readdir로 폴더를 스캔 한 다음 반환되는 이름으로 파일을 열려고합니다. 그들 중 일부는 ENOENT로 열리지 않아 OS조차도 때로는 탈출해야한다고 제안합니까?
gman

13

다음 문자 중 하나를 사용하여 탐색기를 사용하여 Windows에서 파일을 작성하면 해당 문자가 허용되지 않는다고 불평합니다.

\ / : * ? " < > |

좋은 참고 자료는 다음과 같습니다.

파일, 경로 및 네임 스페이스 이름 지정
http://msdn.microsoft.com/en-us/library/aa365247%28VS.85%29.aspx

Microsoft는 다음과 같이 설명합니다.

"... Windows 기반 데스크탑 플랫폼에서 유효하지 않은 경로 문자는 ASCII / 유니 코드 문자 1-31뿐만 아니라 따옴표 ("),보다 작음 (<),보다 큼 (>), 파이프 (|), 백 스페이스를 포함 할 수 있습니다. (\ b), null (\ 0) 및 탭 (\ t)입니다. "

http://msdn.microsoft.com/en-us/library/system.io.path.getinvalidpathchars.aspx


몇 년 전 사용자 모드 Windows에는 이러한 제한 사항과 대소 문자를 구분하지 않는다는 점을 기억합니다 ( "ABC.txt"=== "abc.txt"). 그러나 커널 모드 Windows는 제한이 적으며 대소 문자를 구분합니다 ( "ABC.txt"! == "abc.txt"는 * NIX와 동일). 그러나 모든 의도와 목적을 위해 위의 문자는 사용자 모드에서 실행되기 때문에 대부분의 프로그램에 적용됩니다.
CubicleSoft

\ / : * ? " < > |GNU / Linux 시스템에서 mkdir을 사용하여 모든 것을 벗어날 수 있습니다 . 디렉토리 mkdir '?'를 만드는 데에도 사용할 수 있습니다 ?. 나는 그것을 테스트하기 위해 램 디스크와 XFS 파일 시스템을 사용했다.
S.Goswami

5

Linux 및 기타 POSIX 호환 시스템에서 "/"는 디렉토리 구분 기호로 예약되어 있으며 "\ 0"(NULL 문자)은 문자열의 끝을 지정합니다. 다른 모든 것이 허용됩니다.


1
줄 바꿈, 탭, 제어 문자 등을 피하고 파일 이름이 유효한 UTF-8인지 확인하는 것이 좋습니다.
Flimm
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.