限制bash中的文件名长度

时间:2011-07-04 12:24:09

标签: linux bash file maxlength

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

  1. 文件的绝对路径名中的字符数是否有限制?
  2. 文件名(没有扩展名)的字符数是否有限制?
  3. 如果是这样,这些限制可能是什么?如果它们是系统特定的,我该如何访问它们?

9 个答案:

答案 0 :(得分:59)

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

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

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

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

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

答案 1 :(得分:35)

在临时目录中,运行:

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。

答案 2 :(得分:14)

在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

答案 3 :(得分:10)

我参考其他答案,请进行投票。

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

要在中动态获取这些属性:

  • 按照dogbane
  • 的说明创建更长更长的文件名(或路径名)
  • 使用tim建议的命令$ getconf NAME_MAX /mnt/sda2/ 255 $ getconf PATH_MAX /mnt/sda3/ 4096 ,该命令也可在Linux上使用:

    {{1}}

答案 4 :(得分:8)

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

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

答案 5 :(得分:3)

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

是的,有。

在服务器错误

上的问题answer by sfp上查看Filename length limits on linux?

简而言之:

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

并且:

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

在相同的链接答案中:

#define NAME_MAX         255    /* # chars in a file name */

答案 6 :(得分:2)

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

有关详情,请参阅Comparison of file systems

答案 7 :(得分:2)

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

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

答案 8 :(得分:1)

仅供参考,在Docker上,文件名限制目前为242 characters