2009-08-21 4 views
41

내가 파일 이름을 표현하지 않는 것이 보증되는 문자열을 만들고 싶었 경우에, 나는 윈도우에있는 다음 문자 중 하나를 넣을 수 있습니다 :잘못된 Linux 파일 이름이 있습니까?

\/: * ? | < > 

예를 들어,

this-is-a-filename.png 

?this-is-not.png 

Linux에서 '문자열이 아닌 파일'로 식별 할 수있는 방법이 있습니까?

+0

적어도 '/'는 확실히 허용되지 않습니다. 그렇지 않은 경우 완전한 PITA가됩니다. –

+1

char * str = "foo/bar"; – nos

답변

35

거의 제한이 없습니다. '/''\0'은 제외하고 아무 것도 사용할 수 없습니다. 그러나 some people은 이러한 유연성을 허용하는 것이 좋지 않다고 생각합니다.

+5

+ 사용중인 파일 시스템에 따라 다를 수 있지만 매우 잘 표현할 수 있습니다. –

+0

많은 응용 프로그램이 파일 이름을 텍스트 문자열로 취급하므로 모든 종류의 문자 인코딩 문제가 발생하므로 유연성이 문제가됩니다. 그리고 그것은 그걸로 명백한 문제가있어 :) – nos

+2

사실 적어도 적어도 일부 파일 시스템이 NUL을 지원한다고 생각합니다. –

7

Linux에서 유효하지 않은 경로 이름은 빈 문자열로 잘못된 이름이 하나 뿐인 경우 사용할 수 있습니다. "///foo"과 같은 문자열을 사용할 수도 있습니다.이 문자열은 정규 경로 이름이 아니지만 파일 ("/foo")을 참조 할 수 있습니다. 또 다른 가능성은 "/dev/null/foo"과 같을 것입니다. /dev/null에는 POSIX 정의 된 비 디렉토리 의미가 있기 때문입니다. 일반 파일을 참조 할 수없는 문자열 만 필요하면 항상 "/"또는 "."을 사용할 수 있습니다.

-2

저는 개인적으로 문제가 Linux가 아니라 Linux에서 사용하는 응용 프로그램을 많이 발견합니다.

예를 들어 Amarok을들 수 있습니다. 최근에 저는 특정 Windows 컴퓨터에서 복사 한 특정 아티스트가 라이브러리에없는 곳에 나타났습니다. 파일이 있는지 확인한 다음 폴더 이름의 특정 문자 (아티스트 이름)가 실제 문자가 아닌 이상한 모양의 사각형으로 나타났습니다.

셸 터미널에서 파일 이름이 낯선 것처럼 보입니다./Music/Albums/Einst $ '\ 374'rzende \ Neubauten은 이상한 예입니다.

이 파일들이 분명히 있었지만, Amarok은 어떤 이유로 그들을 볼 수 없었습니다. 필자는 쉘 블리커리를 사용하여 정식 버전으로 이름을 바꿀 수있었습니다. 그런 다음 Musicbrainz Picard를 사용하여 ASCII 전용 문자로 다시 이름을 바꿀 수있었습니다. 불행하게도 Picard는 파일 이름을 바꿀 때까지 파일을 열 수 없으므로 쉘 스크립트가 필요합니다.

전반적으로 이것은 까다로운 영역이며 특정 폴더 나 파일 이름에 펑키 문자가 포함 된 Windows와 Linux간에 음악 컬렉션을 동기화하려는 경우 매우 어려워 보입니다.

가장 안전한 방법은 ASCII 전용 파일 이름을 사용하는 것입니다.

+1

이것은 내가 두려워하는 문제를 다루지 않습니다. – Mat

+0

나는 동의하지 않는다.기술적으로 NTFS 파일 시스템은이를 사용하는 기본 "응용 프로그램"(Windows)이 유효하거나 사용하지 않는 모든 종류의 유용한 기능을 지원합니다. – OOPMan

+0

Windows 상자에 Linux 로켈과 다른 인코딩이 사용 된 것 같습니다. 파일 이름이 로케일과 동일한 인코딩을 사용하여 인코딩되는 한, ASCII 문자를 사용하는 것이 안전하다고해도 와이드 문자를 사용하는 것이 좋습니다. –