限制bash中的文件名长度

Sri*_*ram 68 linux bash file maxlength

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

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

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

e-s*_*tis 61

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

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

扩展名不是FS知道的,它包含255个字节,包含扩展名(您可以使用没有任何扩展名的文件名).

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

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

  • 在linux/limits.h中定义的linux内核强制限制[PATH_MAX](http://stackoverflow.com/questions/9449241/where-is-path-max-defined-in-linux),通常为4096焦炭的.最后一个字符是为字符串终止符null字符保留的. (7认同)

dog*_*ane 36

在临时目录中,运行:

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

我得到:

touch: cannot touch `aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa': File name too long
256
Run Code Online (Sandbox Code Playgroud)

这意味着我的限制是255.


小智 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
Run Code Online (Sandbox Code Playgroud)


oli*_*bre 10

我请参考其他答案,请提出投票.

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

要在动态获取这些属性:

  • dogbane所解释的那样,创建一个更长更长的文件名(或路径名)
  • 使用timgetconf提出的命令,也可以在Linux上使用:

    $ getconf NAME_MAX /mnt/sda2/
    255
    $ getconf PATH_MAX /mnt/sda3/
    4096
    
    Run Code Online (Sandbox Code Playgroud)


Mic*_*yan 8

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

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