以下问题仅适用于bash和linux:
如果是这样,这些限制可能是什么?如果它们是系统特定的,我该如何访问它们?
答案 0 :(得分:59)
这在很大程度上取决于文件系统。对于ext FS(目前在Linux上使用最多):
扩展名不是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上,文件名和路径名长度取决于:
linux/limits.h
中的getconf
常量定义,如Michael Aaron Safyan所述,后来David Balažic指出a similar question。要在bash中动态获取这些属性:
答案 4 :(得分:8)
Single UNIX Specification在limits.h中提到NAME_MAX
和PATH_MAX
个常量,可以使用pathconf读取。但是,这是依赖于文件系统的,并且您不太可能达到这样的限制。
注意:作为程序员,您不应该对这些限制进行硬编码。您应该使用动态分配,这样只要底层系统允许您正在执行的操作,它就会始终有效。
答案 5 :(得分:3)
- 文件的绝对路径名中的字符数是否有限制?
醇>
是的,有。
在服务器错误
上的问题answer by sfp上查看Filename length limits on linux?简而言之:
#define PATH_MAX 4096 /* # chars in a path name including nul */
并且:
- 文件名(没有扩展名)的字符数是否有限制?
醇>
在相同的链接答案中:
#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。