Windows 및 Linux 디렉토리 이름에는 어떤 문자가 금지되어 있습니까?


355

나는 리눅스에서 / 불법이며 Windows에서 다음과 같은 불법임을 알고 있습니다 (제 생각에) * . " / \ [ ] : ; | ,

내가 뭘 놓치고 있니?

그러나 포괄적 인 안내서와 2 바이트 문자를 고려한 안내서가 필요합니다. 외부 리소스에 연결하는 것이 좋습니다.

먼저 금지 된 문자를 포함 할 수있는 이름을 사용하여 파일 시스템에 디렉토리를 작성해야하므로 해당 문자를 밑줄로 바꿀 계획입니다. 그런 다음이 디렉토리와 그 내용을 zip 파일 (Java를 사용하여)에 작성해야하므로 zip 디렉토리의 이름에 관한 추가 조언이 필요합니다.


13
언급 한 문자 중 일부는 실제로 Windows에서 허용됩니다. 이것을 확인하십시오 :echo abc > "ab.;,=[1]"
dolmen

3
또한 <와>는 Windows에서 불법임을 잊지 마십시오.
AnotherParker

4
/ 리눅스에서 불법이 아닙니다. 입력 할 때 그냥 \로 이스케이프하면됩니다.
David C. Bishop

5
@ DavidC.Bishop : 이 게시물 은 리눅스 커널이 슬래시를 포함하는 파일 이름으로 작업하는 것을 막을 것이라고 주장합니다. 작동시킬 수 있었습니까?
Soren Bjornstad

14
"/는 리눅스에서 불법이 아닙니다. 입력 할 때 \로 이스케이프하면됩니다"–이 문장은 완전히 틀 렸습니다. filename 구성 요소는 /를 포함 할 수 없으며 이스케이프 처리는 효과가 없습니다.
Jim Balter

답변:


215

금지 된 파일 이름 문자에 대한 "포괄적 인 안내서"는 파일 이름과 문자를 예약하기 때문에 Windows에서 작동하지 않습니다. 그렇습니다. 같은 문자 * " ?와 다른 문자 는 금지되어 있지만 금지 된 유효한 문자로만 구성되는 이름은 무한합니다. 예를 들어, 공백과 점은 유효한 파일 이름 문자이지만 해당 문자로만 구성된 이름은 금지됩니다.

Windows는 대문자와 소문자를 구분하지 않으므로 이름이 지정된 폴더가 A있으면 이름을 가진 폴더를 만들 수 없습니다 a. 더 나쁜 것은, 겉으로-허용 이름은 좋아 PRN하고 CON, 많은 다른 사람은, 예약 및 허용되지 않습니다. Windows에는 몇 가지 길이 제한이 있습니다. 한 폴더에서 유효한 파일 이름은 다른 폴더로 이동하면 유효하지 않을 수 있습니다. 파일 및 폴더 이름 지정 규칙 은 Microsoft 문서에 있습니다.

일반적으로 사용자 생성 텍스트를 사용하여 Windows 디렉토리 이름을 작성할 수 없습니다. 당신이 그들이 원하는 이름 무엇이든 사용자 수 있도록하려면, 당신은 같은 안전 이름을 만들어야합니다 A, AB, A2등., 매장 사용자가 생성 한 이름과 응용 프로그램 데이터 파일에 자신의 경로 등가물 및 응용 프로그램에서 경로 매핑을 수행합니다.

사용자가 생성 한 폴더 이름을 반드시 허용해야하는 경우 폴더 이름이 유효하지 않은지 확인하는 유일한 방법은 예외를 포착하고 이름이 유효하지 않은 것으로 가정하는 것입니다. 액세스 거부, 오프라인 드라이브 및 드라이브 공간 부족에 대한 예외는 유효하지 않은 이름에 대해 발생할 수있는 예외와 겹치므로 위험이 따릅니다. 큰 상처를 줄 수 있습니다.


11
MSDN 링크의 핵심 문구는 "및 대상 파일 시스템이 허용하지 않는 다른 문자"입니다. Windows에 다른 파일 시스템이있을 수 있습니다. 일부는 유니 코드를 허용하고 다른 일부는 허용하지 않을 수 있습니다. 일반적으로 이름을 확인하는 유일한 안전한 방법은 대상 장치에서 이름을 시험해 보는 것입니다.
Adrian McCarthy

72
몇 가지 지침이 있으며 "금지 된 유효한 문자로만 구성되는 무한한 수의 이름이 있습니다" 는 건설적인 것이 아닙니다. 마찬가지로 "Windows가 대문자를 구분하지 않고 소문자 문자를" 어리석은 예외 - 영업 이익이 구문이 아니라 의미에 대해 질문하고, 권리 생각을 가진 사람들이 같은 파일 이름이 있음을 말할 것 A.txt이었다 무효 때문에이 a.TXT있을 수 있습니다.
Borodin

9
COPY CON PRN키보드 입력 또는 가능한 stdin에서 읽고 프린터 장치에 복사하는 것을 의미합니다. 그것이 현대의 창문에서 여전히 유효한지는 확실하지 않지만 확실히 오랫동안 사용되었습니다. 예전에는 텍스트를 입력하고 도트 매트릭스 프린터로 간단히 출력 할 수있었습니다.
AntonPiatek

6
"건설적이지 않다"-반대로, 그것은 사실이다. 건설적이지 않은 것은 Borodin의 호전입니다.
Jim Balter

3
"일반적으로 사용자 생성 텍스트를 사용하여 Windows 디렉토리 이름을 작성할 수 없습니다." <-이 작업을 수행하려면 문자 허용 목록 만 있으면됩니다. 이미 존재하는 문제를 무시할 수 있으면 크게 작동합니다.
Casey

532

먼저 간단하게하고 질문에 대답합시다.

  1. 금지 인쇄 가능한 ASCII 문자 는 다음과 같습니다.

    • 리눅스 / 유닉스 :

      / (forward slash)
      
    • 윈도우 :

      < (less than)
      > (greater than)
      : (colon - sometimes works, but is actually NTFS Alternate Data Streams)
      " (double quote)
      / (forward slash)
      \ (backslash)
      | (vertical bar or pipe)
      ? (question mark)
      * (asterisk)
      
  2. 인쇄 할 수없는 문자

    인쇄 할 수없는 문자를 허용하는 소스에서 데이터를 가져온 경우 확인할 것이 더 있습니다.

    • 리눅스 / 유닉스 :

      0 (NULL byte)
      
    • 윈도우 :

      0-31 (ASCII control characters)
      

    참고 : Linux / Unix 파일 시스템에서는 파일 이름에 제어 문자가있는 파일을 작성하는 것이 합법적이지만 사용자가 그러한 파일을 처리하는 것은 악몽 일 수 있습니다. .

  3. 예약 된 파일 이름

    다음 파일 이름이 예약되어 있습니다.

    • 윈도우 :

      CON, PRN, AUX, NUL 
      COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9
      LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, LPT9
      

      (자체적으로 그리고 임의의 파일 확장자를 가진 예 LPT1.txt).

  4. 다른 규칙

    • 윈도우 :

      파일 이름은 공백이나 점으로 끝날 수 없습니다.


5
대부분의 Windows 파일 시스템은 8 비트 문자로 제한되지 않습니다. Windows에서는 금지되는 다른 8 비트 문자 (NUL, 제어 문자)가 많이 있습니다. 이를 고려하더라도 질문자가 금지 된 문자로 구성된 무한한 유효하지 않은 디렉토리 이름이 있기 때문에 질문자가 "파일 시스템에 디렉토리를 작성할 수 없습니다".
Dour High Arch

38
다른 사람들은 이미 건설적인 것이 아니라고 말했습니다. 내가 대답을 찾으려고 여기에 왔을 때 나는 다른 곳에서 수집해야했던 목록을 원했다 : 유효한 파일 이름으로 좋은 시도를 만들 때 사용자 입력에서 필터링 할 문자. 문자가 함께 유효하지 않은 경우에도 약간의 정교함이 필요할 수 있습니다.
Christopher Oezbek

5
Linux에서는 NULL 문자도 금지됩니다.
Dan Jones

3
Linux에서는 줄 바꿈이 금지되지 않습니다. 그래도 그들은 그렇게해야한다고 주장하고 ... NUL이 Linux에서 금지되면 Windows에서 금지되면 동일한 목적을 채 웁니다.
Alcaro

11
@Soaku : 물론 전 세계가 Microsoft를 중심으로 돌아 가지 않기 때문에 아닙니다. 금지하는 데 절대적으로 필요한 두 문자 만있을 때 왜 불필요한 제한을 추가합니까?
firegurafiku

67

Linux 및 기타 Unix 관련 시스템에서는 파일 또는 디렉토리 이름에 표시 할 수없는 문자가 두 개 뿐이며 NUL '\0'및 슬래시 '/'입니다. 물론 슬래시는 디렉토리 구성 요소를 분리하는 경로 이름에 나타날 수 있습니다.

소문 하나는 그것을 가지고 그 스티븐 Bourne 씨 (제외 254 개 파일, 파일 이름에 나타날 수있는 모든 단일 문자 (문자 코드)에 대한 하나를 포함하는 디렉토리를했다 ( '쉘'명예의) /, '\0'; 이름은 .물론, 현재 디렉토리이었다 ). Bourne 쉘을 테스트하는 데 사용되었으며 백업 프로그램과 같은 경고가없는 프로그램에 대해 정기적으로 혼란을 겪었습니다.

다른 사람들은 Windows 규칙을 다뤘습니다.

MacOS X에는 대소 문자를 구분하지 않는 파일 시스템이 있습니다.


1 6 장 테스트, §6.5 스트레스 테스트에서 많이 언급 한 것은 프로그래밍 실습 에서 Kernighan & Pike 였습니다.

Steve Bourne은 자신의 Unix 쉘 (Bourne 쉘로 알려짐) '\0'을 작성할 때 Unix에 나타날 수없는 두 문자를 제외한 각 바이트 값 과 슬래시를 제외 하고 하나의 문자 이름으로 254 개의 파일 디렉토리를 만들었습니다. 파일 이름. 그는 패턴 일치 및 토큰 화에 대한 모든 테스트 방법에 해당 디렉토리를 사용했습니다. (테스트 디렉토리는 물론 프로그램에 의해 만들어졌습니다.) 그 후 몇 년 동안 그 디렉토리는 파일 트리 워킹 프로그램의 골칫거리였습니다. 그들은 그들을 파괴 테스트했습니다.

디렉토리 항목을 포함해야합니다 유의 .하고 ..는 틀림없이 253 파일 (2 디렉토리) 또는 255 개 이름 항목이 아닌 254 개 파일이었다, 그래서. 이것은 일화의 효과 나 설명하는 테스트에 영향을 미치지 않습니다.


1
254 파일? 그리고 utf8은 어떻습니까?
j_kubik

20
254 파일은 모두 파일 이름에 허용 된 문자 당 하나씩 단일 문자 파일 이름입니다. Steve Bourne이 Bourne 쉘을 작성할 때 UTF-8은 눈에 띄지 않았습니다. UTF-8은 유효한 바이트 시퀀스에 대한 규칙을 부과하며 바이트 0xC0, 0xC1, 0xF5-0xFF를 모두 허용하지 않습니다. 그렇지 않으면, 내가 논의하고있는 세부 수준에서 크게 다르지 않습니다.
Jonathan Leffler

1
MacOS HFS + 파일 시스템의 디스크상의 디렉토리 구분 기호는 실제로는 '/'가 아니라 ':'입니다. * nix API로 작업 할 때 일반적으로 OS는 항상 올바른 작업을 수행합니다. 그러나 애플 스크립트와 같이 OSX 세계로 이동하는 경우 이러한 상황이 안정적으로 발생할 것으로 기대하지 마십시오. 아마도 Cocoa API가 /를 사용하고 :을 숨길 것 같습니다.하지만 이전 Carbon API는 그렇지 않습니다.
Dan Pritts

@ DanPritts Xcode의 환경 설정에서 사용자 정의 글꼴 / 색상 구성표를 작성하여 이름에 이름을 지정했습니다 /. 그것은 계획을 가진 새로운 디렉토리를 만들면서 몇 가지 문제를 일으켰습니다.
Andreas

디렉토리 이름에 콜론이있는 경우 PATH콜론이 분리 자로 사용되므로 디렉토리를 Unix 변수에 추가 할 수 없습니다 (Windows의 경우 세미콜론). 따라서, 이러한 디렉토리에있는 프로그램 중 하나 그것이 지정은 (상대 또는 절대 될 수 있음), 또는 당신이 디렉토리에 있어야하고 (점이해야하는 경로로 실행해야 .현재 디렉토리) PATH널리로 간주됩니다, 안전하지 않은.
Jonathan Leffler

36

블랙리스트 문자를 만드는 대신 화이트리스트를 사용할 수 있습니다 . 고려 된 모든 것, 파일 또는 디렉토리 이름 컨텍스트에서 의미가있는 문자 범위는 매우 짧으며, 매우 특정한 이름 지정 요구 사항이 없으면 사용자가 전체 ASCII 테이블을 사용할 수없는 경우 사용자가이를 응용 프로그램에 대해 보유하지 않습니다.

대상 파일 시스템에서 예약 된 이름의 문제점을 해결하지는 않지만 화이트리스트를 사용하면 소스의 위험을 완화하기가 더 쉽습니다.

그 정신에서 이것은 안전한 것으로 간주 될 수있는 다양한 문자입니다.

  • 문자 (az AZ) -필요한 경우 유니 코드 문자
  • 숫자 (0-9)
  • 밑줄 (_)
  • 하이픈 (-)
  • 우주
  • 도트 (.)

그리고 당신이 허용하려는 추가 안전 문자. 이 외에도 공간과 점에 관한 몇 가지 추가 규칙 을 시행해야합니다 . 이것은 일반적으로 충분합니다 :

  • 이름은 하나 이상의 문자 또는 숫자를 포함해야합니다 (점 / 공백 만 피하십시오)
  • 이름은 문자 나 숫자로 시작해야합니다 (앞의 점 / 공백을 피하려면)
  • 이름은 점이나 공백으로 끝날 수 없습니다 (탐색기와 같이 존재하는 경우 간단히 자릅니다)

이것은 이미 상당히 복잡하고 무의미한 이름을 허용합니다. 예를 들어, 이러한 이름은 다음 규칙으로 가능하며 Windows / Linux에서 유효한 파일 이름입니다.

  • A...........ext
  • B -.- .ext

본질적으로 허용 된 문자가 너무 적더라도 실제 의미를 결정하고 그에 따라 이름을 확인 / 조정해야합니다. 내 응용 프로그램 중 하나에서 위와 동일한 규칙을 사용했지만 중복 점과 공백을 제거했습니다.


15
영어를 사용하지 않는 사용자는 누구에게이 문제를 해결해야합니까?
pkh

2
@ pkh : 내 게시물에서 언급했듯이 허용 목록에 필요한 유니 코드 문자를 포함시킵니다. 특히 정규식을 사용하는 경우 특히 문자 범위를 쉽게 지정할 수 있습니다.
AeonOfTime

2
화이트리스트 접근 방식을 사용하지만 Windows에서는 장치 이름 (prn, lpt1, con) 및과 같이 대소 문자를 구분하지 않는 예약 된 문자열을 관리해야합니다.
tahoar

2
Windows 제한을 놓쳤습니다. 점이나 공백으로 끝나서는 안됩니다.
Martin Bonner는 Monica

1
"모든 것을 고려할 때 파일 또는 디렉토리 이름 컨텍스트에 적합한 문자 범위는 매우 짧습니다." 어쩌면 일부 사용 사례 일 수도 있습니다. 현재 20 개 언어로 된 미디어 파일이 포함 된 프로젝트를 진행 중이며 최종 사용자가 해당 방식으로 콘텐츠를 찾을 수 있으므로 파일 이름에 미디어 항목의 제목이 반영되어야합니다. 많은 이름이 구두점을 사용합니다. 파일 이름 문자에 대한 모든 제한에는 가격이 부과되므로이 경우 제한을 최소화해야합니다. 이 사용 사례 에서 파일 이름에 맞지 않는 문자의 범위 는 그보다 훨씬 짧고 단순합니다.
LarsH

29

Windows가 답을 알려주는 쉬운 방법은 탐색기를 통해 파일 이름을 바꾸고 새 이름으로 /를 입력하는 것입니다. Windows에서 잘못된 문자 목록을 알려주는 메시지 상자가 나타납니다.

A filename cannot contain any of the following characters:
    \ / : * ? " < > | 

https://support.microsoft.com/en-us/kb/177506


28

연구 목적으로 만 사용하는 것이 가장 좋은 방법은 Filenames에서이 Wikipedia 항목 을 보는 것 입니다.

사용자 입력의 유효성을 검사하고이를 기반으로 파일 이름을 생성하는 이식 가능한 함수를 작성하려면 짧은 대답은 아닙니다 . Perl의 File :: Spec 과 같은 휴대용 모듈을 살펴보면 이러한 "간단한"작업을 수행하는 데 필요한 모든 홉을 엿볼 수 있습니다.


5

Windows의 경우 PowerShell을 사용하여 확인할 수 있습니다

$PathInvalidChars = [System.IO.Path]::GetInvalidPathChars() #36 chars

UTF-8 코드를 표시하려면 변환 할 수 있습니다

$enc = [system.Text.Encoding]::UTF8
$PathInvalidChars | foreach { $enc.GetBytes($_) }

$FileNameInvalidChars = [System.IO.Path]::GetInvalidFileNameChars() #41 chars

$FileOnlyInvalidChars = @(':', '*', '?', '\', '/') #5 chars - as a difference

PowershelI를 사용하지 않는 사람들의 경우 $ FileNameInvalidChars는 0x00에서 0x1F이며 다음과 같습니다. "<> | *? \ /
Robin Davies

4

Windows 10 (2019)에서 다음 문자는 입력하려고 할 때 오류로 인해 금지됩니다.

파일 이름은 다음 문자를 포함 할 수 없습니다 :

\ / : * ? " < > |


3

Christopher Oezbek의 답변을 기반으로 한 Windows 용 AC # 구현은 다음과 같습니다.

containsFolder 부울에 의해 더 복잡해졌지만 모든 것을 포함하기를 희망합니다.

/// <summary>
/// This will replace invalid chars with underscores, there are also some reserved words that it adds underscore to
/// </summary>
/// <remarks>
/// /programming/1976007/what-characters-are-forbidden-in-windows-and-linux-directory-names
/// </remarks>
/// <param name="containsFolder">Pass in true if filename represents a folder\file (passing true will allow slash)</param>
public static string EscapeFilename_Windows(string filename, bool containsFolder = false)
{
    StringBuilder builder = new StringBuilder(filename.Length + 12);

    int index = 0;

    // Allow colon if it's part of the drive letter
    if (containsFolder)
    {
        Match match = Regex.Match(filename, @"^\s*[A-Z]:\\", RegexOptions.IgnoreCase);
        if (match.Success)
        {
            builder.Append(match.Value);
            index = match.Length;
        }
    }

    // Character substitutions
    for (int cntr = index; cntr < filename.Length; cntr++)
    {
        char c = filename[cntr];

        switch (c)
        {
            case '\u0000':
            case '\u0001':
            case '\u0002':
            case '\u0003':
            case '\u0004':
            case '\u0005':
            case '\u0006':
            case '\u0007':
            case '\u0008':
            case '\u0009':
            case '\u000A':
            case '\u000B':
            case '\u000C':
            case '\u000D':
            case '\u000E':
            case '\u000F':
            case '\u0010':
            case '\u0011':
            case '\u0012':
            case '\u0013':
            case '\u0014':
            case '\u0015':
            case '\u0016':
            case '\u0017':
            case '\u0018':
            case '\u0019':
            case '\u001A':
            case '\u001B':
            case '\u001C':
            case '\u001D':
            case '\u001E':
            case '\u001F':

            case '<':
            case '>':
            case ':':
            case '"':
            case '/':
            case '|':
            case '?':
            case '*':
                builder.Append('_');
                break;

            case '\\':
                builder.Append(containsFolder ? c : '_');
                break;

            default:
                builder.Append(c);
                break;
        }
    }

    string built = builder.ToString();

    if (built == "")
    {
        return "_";
    }

    if (built.EndsWith(" ") || built.EndsWith("."))
    {
        built = built.Substring(0, built.Length - 1) + "_";
    }

    // These are reserved names, in either the folder or file name, but they are fine if following a dot
    // CON, PRN, AUX, NUL, COM0 .. COM9, LPT0 .. LPT9
    builder = new StringBuilder(built.Length + 12);
    index = 0;
    foreach (Match match in Regex.Matches(built, @"(^|\\)\s*(?<bad>CON|PRN|AUX|NUL|COM\d|LPT\d)\s*(\.|\\|$)", RegexOptions.IgnoreCase))
    {
        Group group = match.Groups["bad"];
        if (group.Index > index)
        {
            builder.Append(built.Substring(index, match.Index - index + 1));
        }

        builder.Append(group.Value);
        builder.Append("_");        // putting an underscore after this keyword is enough to make it acceptable

        index = group.Index + group.Length;
    }

    if (index == 0)
    {
        return built;
    }

    if (index < built.Length - 1)
    {
        builder.Append(built.Substring(index));
    }

    return builder.ToString();
}

세 가지 질문이 있습니다. 1. StringBuilder초기 용량 값으로 초기화 한 이유는 무엇 입니까? 2. 왜 filename? 의 길이에 12를 더했 습니까? 3. 12 명이 임의로 선택되었거나이 숫자 뒤에 어떤 생각이 있었습니까?
iiminov

2

2017 년 4 월 18 일 현재이 주제에 대한 답변 중 단순한 흑백 또는 문자 목록과 파일 이름은 분명하지 않으며 많은 답변이 있습니다.

내가 제안 할 수있는 가장 좋은 제안은 사용자가 원하는대로 파일 이름을 지정하는 것이 었습니다. 응용 프로그램이 파일을 저장하려고 시도 할 때 오류 처리기를 사용하고, 예외를 포착하고, 파일 이름이 책임이 있다고 가정하고 (저장 경로도 제대로 확인한 후) 사용자에게 새 파일 이름을 입력하라는 메시지를 표시합니다. 최상의 결과를 얻으려면이 검사 절차를 사용자가 올바르게 수행하거나 포기할 때까지 계속되는 루프 내에 배치하십시오. 나를 위해 가장 잘 작동했습니다 (적어도 VBA에서).


1
@FCastro의 답변은 기술적 인 관점에서 정확합니다. 그러나 UX 관점에서 볼 때 그것은 악몽입니다. ​​사용자는 "뭔가 입력하고 성공하면 말해 줄 것입니다"게임을 계속해서 반복해야합니다. 차후에 변환 될 잘못된 문자를 입력했음을 사용자에게 알려주는 메시지 (경고 스타일)가 표시됩니다.
Mike

Christopher Oezbek은 2015 년에 이러한 블랙리스트를 제공했습니다.
Jim Balter

1

유일하게 잘못된 유닉스 문자는 /NULL일 수 있지만 명령 줄 해석에 대한 일부 고려 사항이 포함되어야합니다.

예를 들어, 파일 1>&2또는 2>&1Unix 로 이름을 지정하는 것이 합법적 일 수 있지만 이와 같은 파일 이름은 명령 행에서 사용될 때 잘못 해석 될 수 있습니다.

마찬가지로 파일 이름을 지정할 수도 $PATH있지만 명령 행에서 파일 에 액세스하려고하면 쉘이 $PATH변수 값으로 변환 됩니다.


BASH의 리터럴의 경우 보간없이 리터럴을 선언하는 가장 좋은 방법은 다음 $'myvalueis'과 같습니다. ex : $ echo 'hi' > $'2>&1', cat 2\>\&1"hi"
ThorSummoner

1

정의 가 어려우며 , 합법적이며 이미 해결 되지 않았 으며 화이트리스트 가 제안되었습니다 . 그러나 Windows 는 8 비트 이상의 문자를 지원합니다. Wikipedia는 다음같이 말합니다 .

파일 이름에 사용되는 Segoe UI 글꼴 의 콜론과 동일하므로 수정 자 문자 콜론 [( 아래 7. 참조 )]은 Windows 파일 이름에 종종 사용됩니다 . [상속 ASCII] 콜론 자체는 허용되지 않습니다.

따라서 "불법적 인"문자를 대체하기 위해 유니 코드 문자를 사용하는 훨씬 더 자유로운 접근 방식을 제시하고자합니다. 필자가 비교할만한 유스 케이스에서 결과를 훨씬 더 읽기 쉽게 발견했습니다. 이 블록 을 예로 들어보십시오 . 또한 원본 콘텐츠를 복원 할 수도 있습니다. 가능한 선택과 연구는 다음 목록에서 제공됩니다.

  1. 대신에 *( U+002A * ASTERISK), 당신이 사용할 수있는 많은 중 하나 예를 들어, 상장을 U+2217 ∗ (ASTERISK OPERATOR)하거나Full Width Asterisk U+FF0A *
  2. 대신 ., 당신이 중 하나를 사용할 수 있습니다 이러한 예를 들면,⋅ U+22C5 dot operator
  3. 대신에 "사용할 수 있습니다 “ U+201C english leftdoublequotemark(대안은 여기 참조 ).
  4. /( / SOLIDUS U+002F) 대신 ( 여기의∕ DIVISION SLASH U+2215 다른 항목 )을 사용할 수 있습니다
  5. \( \ U+005C Reverse solidus) 대신 ⧵ U+29F5 Reverse solidus operator( more )를 사용할 수 있습니다
  6. 대신에 [( U+005B Left square bracket)와 ]( U+005D Right square bracket), 당신은 예를 들어 사용할 수 있습니다 U+FF3B[ FULLWIDTH LEFT SQUARE BRACKETU+FF3D ]FULLWIDTH RIGHT SQUARE BRACKET(에서 여기에 더 많은 가능성, 여기 )
  7. 대신 또는 :을 사용할 수 있습니다 ( 파일 이름에 사용되는 Segoe UI 글꼴 의 콜론과 동일하므로 Windows 파일 이름에서 종종 사용되는 콜론 (문자) 참조 ) . 콜론 자체는 허용되지 않음) ( 여기 참조 )U+2236 ∶ RATIO (for mathematical usage)U+A789 ꞉ MODIFIER LETTER COLON
  8. 대신에 ;사용할 수 있습니다 U+037E ; GREEK QUESTION MARK( 여기 참조 ).
  9. 의 경우 |: 좋은 대체 등이있다 U+0964 । DEVANAGARI DANDA, U+2223 ∣ DIVIDES또는 U+01C0 ǀ LATIN LETTER DENTAL CLICK( 위키 백과 ). 또한 상자 그리기 문자 에는 다양한 다른 옵션이 있습니다.
  10. 예를 들어 ,( , U+002C COMMA) 대신 사용할 수 있습니다 ‚ U+201A SINGLE LOW-9 QUOTATION MARK( 여기 참조 )
  11. 의 경우 ?( U+003F ? QUESTION MARK:)이 좋은 후보는 U+FF1F ? FULLWIDTH QUESTION MARKU+FE56 ﹖ SMALL QUESTION MARK(에서 그는 다시 보다 두 돌연변이 블록 , "질문"을 검색)

0

Windows에서 인터넷 바로 가기를 만들 때 파일 이름을 만들려면 슬래시 (마이너스로 변환 됨)를 제외하고 잘못된 문자를 건너 뜁니다.


3
"답변이 아닙니다 ... 거절되었습니다 – 중재자가 귀하의 깃발을 검토했지만이를지지 할 증거가 없습니다". 당신은 나를 농담해야합니다. 더 나은 중재자입니다.
Jim Balter

-1

유닉스 쉘에서는 거의 모든 문자를 작은 따옴표로 인용 할 수 있습니다 '. 작은 따옴표 자체를 제외하고는 \확장되지 않기 때문에 제어 문자를 표현할 수 없습니다 . 따옴표 붙은 문자열 내에서 작은 따옴표 자체에 액세스하는 것이 가능합니다. 문자열을 작은 따옴표와 큰 따옴표로 연결할 수 있기 때문에 'I'"'"'m'파일에 액세스하는 데 사용할 수 있습니다 "I'm"(여기에서 큰 따옴표도 가능함).

따라서 쉘에 입력하기가 너무 어려우므로 모든 제어 문자를 피해야합니다. 나머지 부분은 여전히 ​​재밌습니다. 대시로 시작하는 파일은 대부분의 명령이 두 개의 대시가 --없거나 옵션으로 시작하지 않는 한 옵션으로 읽으 ./므로 시작을 숨 깁니다 -.

멋지게하려면 쉘과 일반적인 명령이 구문 요소로 사용하는 문자를 사용하지 마십시오. 때로는 위치에 따라 다릅니다. 따라서 여전히 -첫 문자가 아닌을 사용할 수 있습니다 . 와 .마찬가지로 첫 번째 문자로 사용할 수 있습니다 ( "숨겨진 파일"). 의미가 있다면 파일 이름은 VT100 이스케이프 시퀀스 ;-)이므로 ls가 출력을 왜곡합니다.


문제는 껍질에 관한 것이 아닙니다.
Jim Balter

-8

나는 같은 요구가 있었고 권장 사항이나 표준 참조를 찾고 있었고이 스레드를 발견했습니다. 파일 및 디렉토리 이름에서 피해야 할 현재 블랙리스트 문자는 다음과 같습니다.

$CharactersInvalidForFileName = {
    "pound" -> "#",
    "left angle bracket" -> "<",
    "dollar sign" -> "$",
    "plus sign" -> "+",
    "percent" -> "%",
    "right angle bracket" -> ">",
    "exclamation point" -> "!",
    "backtick" -> "`",
    "ampersand" -> "&",
    "asterisk" -> "*",
    "single quotes" -> "“",
    "pipe" -> "|",
    "left bracket" -> "{",
    "question mark" -> "?",
    "double quotes" -> "”",
    "equal sign" -> "=",
    "right bracket" -> "}",
    "forward slash" -> "/",
    "colon" -> ":",
    "back slash" -> "\\",
    "lank spaces" -> "b",
    "at sign" -> "@"
};

4
@목록 에있는 것에 대해 언급 해 주 시겠습니까?
PypeBros 8

8
문제는 어떤 캐릭터가 불법인지에 대한 것이었다. 목록에있는 대부분의 문자는 합법적입니다.
Nigel Alderton

6
편지 b? 롤, 나는 그것이 b의 lank spaces... 가정 여전히 몇 가지를 남겨두고 ... 나는 사진의 이름 (),-.;[]^_~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ.jpg을 변경했지만 화가 보이기 때문에 다시 변경해야했습니다 ...
ashleedawg
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.