长期使用 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 中是否有任何这样的限制(或类似的限制)我需要注意?
最大文件名长度为 255 个字节。在ext4的 wiki 页面中找到。
最大路径为 4096 个字符。在这个 Unix&Linux SE Question 中找到。
虽然,我确实发现这篇 wiki 文章没有在 ext4 中指定最大文件路径。
正如@sergiy-kolodyaznyy 所说,最大文件名长度将取决于文件系统,并且绝大多数文件名长度限制为 255 个字节。
他的图表中一个值得注意的遗漏是光学媒体。虽然 UDF 和 Rock Ridge 扩展对文件名有相同的 255 个字符限制,但没有 Rock Ridge 和 Joliet 的 ISO9660 都有更严格的限制,如果您正在执行诸如备份
youtube-dl
下载之类的操作,您实际上可能会遇到这些限制。Joliet 文件名限制为 64 个 UTF-16 代码点或其中的 103 个,如果您的光盘母带处理程序可以选择以在实践中似乎不会造成伤害的方式违反规范的话。
同样,没有 Rock Ridge 扩展的 ISO 9660 级别 2 和 3 仅限于 31 个字符或 37 个字符的文件名,如果您使用该规范又快又松的话。
ISO 9660:1999由genisoimage 支持,但不受 K3b 等前端支持,其限制为 207 字节(没有 Rock Ridge)或 197 字节(有 Rock Ridge)。
(来源:
genisoimage
手册页)至于最大路径长度,这是一个很大的误解。大多数 Linux 文件系统都没有一个。
有一个名为 的常量
PATH_MAX
,但它只是某些 POSIX API 的最大值,您可以解决 它。这种“路径长度无限制”约定的唯一相应例外是 FAT32 和 exFAT(32,760 个 Unicode 字符)、NTFS 和 ReFS(32,767 个 Unicode 字符)、UDF(1,023 字节)和 ISO 9660(不清楚,但我见过它表示为 180、207、212 或 222 字节)。
这可以通过运行这个小型 Python 程序然后浏览生成的目录来轻松演示。
在提示符中显示整个路径的My
bash
会遇到问题。但是zsh
,在提示符中仅显示当前文件夹的 my 不会有任何问题,甚至有一个pwd
内置函数可以毫无问题地显示整个 5000+ 字节的路径。路径名限制取决于使用的文件系统。jtoscarson 的回答涵盖了 Ubuntu 上默认的 ext4,但是您可以在 Ubuntu 上使用各种文件系统。引用 WerkkreW关于 serverfault 的答案,这里有一些文件系统及其限制:
另请注意,各种文件系统对文件名中可以出现哪种类型的字符有限制。例如,文件名
ext4
不能包含 NULL 和/
. 另请参阅 Wikipedia article for filesystem comparisons。另请注意,Linux 文件系统必须考虑POSIX 定义:
从limits.h:
我相信确定这一点的最可靠方法是使用
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