80

以下问题仅适用于 bash 和 linux:

  1. 文件的绝对路径名中的字符数是否有限制?
  2. 文件名(无扩展名)的字符数是否有限制?

如果是这样,这些限制可能是什么?如果它们是系统特定的,我如何访问它们?

4

9 回答 9

76

这在很大程度上取决于文件系统。对于 ext FS(目前在 Linux 上使用最多):

  • 最大文件名长度:255 字节
  • 最大路径长度:无

扩展名不是 FS 知道的,它有 255 个字节,包括扩展名(您可以拥有不带任何扩展名的文件名)。

以下是每个 FS 的这些限制的更详尽列表。

您的文件系统也可以有扩展,这些扩展也可以更改您的最大长度。例如,eCryptFS 使用较低文件名的一部分来保存元数据,并将文件名的最大长度限制为 143 个字符。请参阅Ubuntu eCryptFS 启动板条目。

于 2011-07-04T12:33:34.737 回答
41

在临时目录中,运行:

num=1
while [ true ]
do 
   if ! touch $(printf "%${num}s"  | tr ' ' 'a')
   then
       echo $num
       break
   fi
   ((num++))
done

我得到:

touch: cannot touch `aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa': File name too long
256

这意味着我的限制是 255。

于 2011-07-04T12:45:06.820 回答
15

在 Mac OS X 10.6.7 上:

man getconf
getconf NAME_MAX /   # 255 bytes
getconf PATH_MAX /   # 1024 bytes

# check file path length with wc before using touch, mkdir, etc.
echo '/very/lllooooonnnnnggggg/file/path.txt' | wc -c
于 2011-07-05T12:36:14.467 回答
10

我参考了其他答案,请点赞。

在 Linux 上,文件名和路径名长度取决于:

中动态获取这些属性:

  • 按照dogbane的解释,创建一个越来越长的文件名(或路径名)
  • 使用timgetconf建议的命令,该命令在 Linux 上也可用:

    $ getconf NAME_MAX /mnt/sda2/
    255
    $ getconf PATH_MAX /mnt/sda3/
    4096
    
于 2014-05-24T07:20:57.230 回答
8

可以使用 pathconf 读取的限制.h中的 Single UNIX Specification 提及NAME_MAXPATH_MAX常量。但是,这非常依赖于文件系统,您不太可能达到这样的限制。

注意:作为程序员,您不应该对这些限制进行硬编码。您应该使用动态分配,这样只要底层系统允许您执行任何操作,它就会始终有效。

于 2011-07-04T12:35:11.497 回答
4
  1. 文件的绝对路径名中的字符数是否有限制?

就在这里。

请参阅sfp对 Linux 上的文件名长度限制问题的回答?关于服务器故障

简而言之:

#define PATH_MAX        4096    /* # chars in a path name including nul */

对于:

  1. 文件名(无扩展名)的字符数是否有限制?

在同一个链接的答案中:

#define NAME_MAX         255    /* # chars in a file name */
于 2013-05-19T16:46:55.813 回答
3

仅供参考,在 Docker 上,文件名限制当前为242 个字符

于 2017-03-16T17:08:55.953 回答
2

这取决于使用的文件系统。例如,ext4 的最大文件名长度为 256 字节,路径名长度不受限制。

有关更多信息,请参阅文件系统比较。

于 2011-07-04T12:31:56.053 回答
2

这不依赖于 bash;它取决于操作系统。在 Mac 上,文件名的 0xff 和路径名的 0x400 左右。Ubuntu 9 的文件名限制为 144 个字符。

我在Wikipedia中找到了这个链接。它告诉许多文件系统的路径和文件名限制。

于 2011-07-04T12:32:32.577 回答