Ubuntu中文件路径的最大长度是多少?


9

我已经使用Windows系统很长时间了,我知道在某个时候,如果文件和文件夹名称太长,就会出现一个错误窗口。

当我尝试使用SFTP将文件从服务器备份到以下位置的文件夹时,这发生了:

D:(Windows drive partition)/Temporary/Projects/2015-06/Websites/Guitar-Site/Images/Logos/Manufacturers/Instruments/Basses/(long file name).png

如您所见,有时我倾向于建立非常指定的文件夹路径,如果文件名也很长,NTFS可能无法以这种方式保存它。

我目前正在担心物理备份,因为备份驱动器上的文件夹路径将添加/backups/(drive name)/...到所有文件路径。

在ext4 / Ubuntu中是否有我需要注意的此类限制(或类似限制)?


2
在ServerFault上回答:4k。这是操作系统限制,而不是FS限制。serverfault.com/questions/9546/...
约翰ñ

Answers:


15

文件名的最大长度为255个字节。在ext4Wiki页面中找到。

且最大路径为4096个字符。在此Unix&Linux SE问题中找到

虽然,但是我确实找到了这个Wiki文章该文章未在ext4中指定最大文件路径。


您好jtoscarson,谢谢您的回答。我可能会尝试查找,但是您是否愿意解释“ 255字节”的长度是什么意思?我假设并非所有字符都必须占用8位,所以我认为总共超过255个字符吗?考虑到可以使用不同的字符集,或者更少。
Prototype700

一般来说,单个字符是一个字节。我没有查找文档,但是这里有一个简单的测试: jtoscarson@Tylers-Ubuntu:~$ echo "123abc" | wc -c 7 jtoscarson@Tylers-Ubuntu:~$ echo "123abc" | wc -m 7 -m在计算字符,而-c在计算字节。它是7而不是6的原因是未打印的行尾字符。因此,在文件名中的字符总数将是255
jtoscarson

1
使用UTF-8语言环境的回报4echo -n "💩" | wc -c。尽管该文件名的长度为1个字素,但创建使用该名称的文件名将占用4个字节。“字符”的概念没有明确定义(通常表示字节,字形或UNICODE代码点)。
Mikko Rantalainen '18

在加密的文件系统上,最大文件名长度为143个字节。要确定文件名是否足够短,您可以使用来在Python中找到文件名的字节长度len(filename.encode())
Marvo

0

我认为确定此问题的最可靠方法是使用pathconf(".", _PC_PATH_MAX);POSIX函数,该函数确定给定路径的最大路径。

正如功能所暗示的,这在文件系统之间可能有所不同。

我不知道可以公开它的命令行实用程序。这是一个最小的C示例:https : //stackoverflow.com/questions/16285623/how-to-get-the-to-get-path-to-the-current-file-pwd-in-linux-from-c / 54155296#54155296



0

路径名限制取决于所使用的文件系统。jtoscarson的答案涵盖了ext4,这是Ubuntu上的默认设置,但是您可以在Ubuntu上使用各种文件系统。引用WerkkreW关于serverfault的答案,以下是一些文件系统及其限制:

BTRFS   255 bytes
exFAT   255 UTF-16 characters
ext2    255 bytes
ext3    255 bytes
ext3cow 255 bytes
ext4    255 bytes
FAT32   8.3 (255 UCS-2 code units with VFAT LFNs)
NTFS    255 characters
XFS     255 bytes

还要注意,各种文件系统对于文件名中可以​​出现的字符类型有限制。例如,中的文件名ext4不能包含NULL和/。另请参阅Wikipedia文章,了解文件系统比较

还要注意,Linux文件系统必须考虑POSIX定义

3.266路径名

用于标识文件的字符串。在IEEE Std 1003.1-2001的上下文中,路径名最多包含{PATH_MAX}个字节,包括终止的空字节。它有一个可选的开始斜杠,后跟零个或多个用斜杠分隔的文件名。路径名可以选择包含一个或多个结尾斜杠。多个连续的斜杠被认为与一个斜杠相同。

limits.h

{PATH_MAX}

路径名中的最大字节数,包括终止的空字符。最小可接受值:{_ POSIX_PATH_MAX}

{_POSIX_PATH_MAX}

路径名中的最大字节数。价值:256


0

正如@ sergiy-kolodyazhnyy所说,最大文件名长度将取决于文件系统,绝大多数文件名长度限制为255个字节。

他的图表中一个明显的遗漏是光学媒体。虽然UDF和Rock Ridge扩展名对文件名的限制是255个字符,但是没有Rock Ridge和Joliet的ISO9660都有更严格的限制,如果您要执行诸如备份youtube-dl下载之类的操作,则可能会遇到这些限制。

如果您的光盘制作程序可以选择不违反规范的方式,则Joliet文件名最多只能包含64个UTF-16代码点或103个UTF-16代码点。

同样,如果您在使用规范时过于随意,则不带Rock Ridge扩展名的ISO 9660 2级和3级文件名只能使用31个字符或37个字符的文件名。

ISO 9660:1999,这由genisoimage但不喜欢的K3b支持前端,无论是具有207个字节的限制(没有岩岭)或197个字节(带岩岭)。

(来源:genisoimage联机帮助页)

至于最大路径长度,这是一个很大的误解。大多数Linux文件系统都没有。

有一个命名常量PATH_MAX,但它仅适用于特定的API POSIX最大,它可以工作的 周围

此“路径长度无限制”约定的唯一相应例外是FAT32和exFAT(32,760个Unicode字符),NTFS和ReFS(32,767个Unicode字符),UDF(1,023字节)和ISO 9660(不清楚,但我已经看到了)它表示为180、207、212或222个字节)。

通过运行此小型Python程序,然后浏览生成的目录,可以很容易地证明这一点。

import os
for X in range(20):
    os.mkdir('x' * 255)
    os.chdir('x' * 255)

My bash(在提示中显示整个路径)将出现问题。但是my zsh,它仅在提示中显示当前文件夹,不会有任何问题,甚至具有pwd内置功能,可以显示整个5000字节以上的路径而没有问题。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.