파일 이름에 허용되는 문자


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.