파일 이름에 허용되는 문자


139

운영 체제에 따라 파일 이름에서 허용되는 문자 목록을 어디에서 찾을 수 있습니까? (예 : Linux의 경우 문자 :는 파일 이름에 허용되지만 Windows에는 허용되지 않습니다)


.NET은 Windows 용 정보를 제공합니다.
— leppie


8
@kreker 귀하의 질문은 Android에 관한 것입니다
— congusbongus


답변:


107

Wikipedia Filename 페이지 에서 시작해야 합니다. 적당한 크기의 테이블 ( 파일 이름 제한 비교 )이 있으며 많은 파일 시스템에 예약 된 문자가 나열되어 있습니다.

또한 MS-DOS 와 같은 예약 된 파일 이름을 포함하여 각 파일 시스템에 대한 기타 정보가 많이 CON있습니다. 필자는 include 파일을 짧게 하고 컴파일러가 중단 된 이유를 알아내는 데 30 분을 보냈 const.h을 때 한 번 물 렸기 때문에 언급했습니다 con.h.

입력 콘솔 과 정확히 동일 하도록 DOS 에서 장치의 확장명을 무시했습니다 (물론 컴파일러는 헤더 파일을 계속 입력 하기를 기다렸습니다 ).con.hcon


4
Wikipedia 페이지가 다소 모호하고 혼란 스럽습니다. 예를 들어 "일부 운영 체제에서는 특정 문자를 금지합니다 ...". 실제로 허용되고 허용되지 않는 모든 문자를 나열하는 완전한 테이블을 찾고 있습니다.
— python dude

7
@python, 그 테이블을 보지 말고 그 아래에있는 큰 honkin '을보십시오 ( "파일 이름 제한 비교"라는 제목이 붙음). 그건 하지 그것의 내용에 너무 막연.
— paxdiablo

52
아마 당신이 필요로하는 것은 POSIX "Fully portable filenames"항목 을 보는 것입니다 , 이것들은 다음과 같습니다 :A–Z a–z 0–9 . _ -
— Vladimir Kornea


1
@CpILL Windows, OSX 및 Linux보다 많은 OS가 있습니다. 일부는 매우 간단한 파일 시스템을 가지고 있습니다.
— 우아한 주사위

33

메인 플레이어 파일 시스템에만 관심이 있다면 파일 시스템 비교를 살펴 보십시오.

그래서 어떤 바이트를 제외하고는 NUL, \, /, :, *, ", <, >, |당신이 파일을 가질 수 없습니다 / 폴더를 호출하지 .나 ..(물론)과 더 제어 문자.


7
이것은 정확하지 않습니다. 리눅스는 허용하지 않습니다 /. Windows는 백 슬래시와 일부 문자열 (예 :)을 허용하지 않습니다 CON.
— kgadek

7
그래, 난 제외하고 말했다 .
— CpILL

2
Mac (HFS + 실행) :에서 이름 이 s 인 파일을 만들 수 있습니다.
— erwaman

이것은 정확하지 않습니다. Windows에서 허용하지 않는 추가 문자는 이 답변 을 참조하십시오 .
— mbomb007

Windows는 제어 문자를 허용하지 않습니다 (그러나 Mac은 NUL 이외의 것)
— Thomas Tempelmann

23

Windows OS에서 파일을 작성하고 파일 \이름 과 같이 유효하지 않은 문자를 제공하십시오 . 결과적으로 파일 이름에 유효하지 않은 문자가 모두 포함 된 팝업이 나타납니다.

여기에 이미지 설명을 입력하십시오


5

/Finder에서 Mac OS X (현재 MacOS) 에 대해 더 정확하게 설명 :하는 것은 Unix 파일 시스템에서 해석됩니다 .

Apple이 Classic Mac OS에서 이동할 때 이전 버전과의 호환성을 위해 수행되었습니다.

/Finder에서 파일 이름에 a 를 사용하는 것이 합법적이며 터미널에서 동일한 파일을 보면으로 표시됩니다 :.

그리고 다른 방법으로도 작동합니다 /. 터미널과 함께 파일 이름에 a를 사용할 수 :는 없지만 a 는 OK이며 /Finder에 a 로 표시됩니다 .

일부 응용 프로그램은 혼란을 피하기 위해 또는 이전 Classic Mac OS의 논리를 유지하거나 플랫폼 간의 이름 호환성을 위해 더 제한적이고 두 문자를 모두 금지 할 수 있습니다.


0

"영어 로캘"파일 이름의 경우이 기능이 훌륭합니다. 업로드 된 파일 이름을 삭제하는 데 이것을 사용하고 있습니다. 파일 이름은 디스크의 어떤 것에도 연결되어 있지 않습니다. 파일을 다운로드 할 때를위한 것이므로 경로 확인이 없습니다.

$file_name = preg_replace('/([^\x20-~]+)|([\\/:?"<>|]+)/g', '_', $client_specified_file_name);

기본적으로 Windows 및 기타 OS에서 인쇄 할 수없고 예약 된 모든 문자를 제거합니다. 다른 로케일 및 기능을 지원하기 위해 패턴을 쉽게 확장 할 수 있습니다 .


-1

다음은 파이썬에서 파일 이름을 정리하는 코드입니다.

import unicodedata

def clean_name(name, replace_space_with=None):
    """
    Remove invalid file name chars from the specified name

    :param name: the file name
    :param replace_space_with: if not none replace space with this string
    :return: a valid name for Win/Mac/Linux
    """

    # ref: https://en.wikipedia.org/wiki/Filename
    # ref: /programming/4814040/allowed-characters-in-filename
    # No control chars, no: /, \, ?, %, *, :, |, ", <, >

    # remove control chars
    name = ''.join(ch for ch in name if unicodedata.category(ch)[0] != 'C')

    cleaned_name = re.sub(r'[/\\?%*:|"<>]', '', name)
    if replace_space_with is not None:
        return cleaned_name.replace(' ', replace_space_with)
    return cleaned_name

2
이 코드는 유효하지 않은 (예약 된) 이름을 검사하지 않으며 replace_space_with에서 유효하지 않은 문자도 검사하지 않습니다. 파일 이름 길이가 범위를 벗어납니다. 따라서 :return: a valid name for Win/Mac/Linux모든 상황에서 사실이 아닙니다.
— ack
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.