根据操作系统的不同,在哪里可以找到文件名中允许的字符列表? (例如,在Linux中,字符:被允许出现在文件名中,但在Windows中不允许)


当前回答

更准确地说,MacOS X(现在称为MacOS) / in the Finder被解释为:在Unix文件系统中。

这样做是为了向后兼容苹果从经典Mac操作系统。

在Finder中的文件名中使用/是合法的,在终端中查看相同的文件时,它将显示一个:。

它也可以用另一种方式工作:你不能在终端的文件名中使用/,但是a:是可以的,并且会在Finder中显示为/。

有些应用程序可能会更加严格,禁止使用这两个字符,以避免混淆,或者因为它们保留了以前经典Mac OS的逻辑,或者为了平台之间的名称兼容性。

其他回答

与其试图识别所有不需要的字符, 除了可接受的字符,你可以寻找任何东西。这里有一个正则表达式,用于除posix字符以外的任何字符: Cleaned_name = re.sub(r'[^[:alnum:]。_-]', ", name)

下面是在python中清除文件名的代码。

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: https://stackoverflow.com/questions/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

更准确地说,MacOS X(现在称为MacOS) / in the Finder被解释为:在Unix文件系统中。

这样做是为了向后兼容苹果从经典Mac操作系统。

在Finder中的文件名中使用/是合法的,在终端中查看相同的文件时,它将显示一个:。

它也可以用另一种方式工作:你不能在终端的文件名中使用/,但是a:是可以的,并且会在Finder中显示为/。

有些应用程序可能会更加严格,禁止使用这两个字符,以避免混淆,或者因为它们保留了以前经典Mac OS的逻辑,或者为了平台之间的名称兼容性。

对于“English locale”文件名,这很有效。我用这个来消毒上传的文件名。文件名并不意味着要链接到磁盘上的任何东西,它是在文件下载时使用的,因此没有路径检查。

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

基本上,它会删除Windows和其他操作系统中所有不可打印和保留的字符。您可以轻松地扩展该模式以支持其他地区和功能。

在Windows操作系统上创建一个文件,并在文件名中给它一个像\这样的无效字符。结果,你会得到一个弹出窗口,所有的无效字符在一个文件名。