linux name 限制bash中的文件名長度




maximum file system size (8)

以下問題僅適用於bash和linux:

  1. 文件的絕對路徑名中的字符數是否有限制?
  2. 文件名(沒有擴展名)的字符數是否有限制?

如果是這樣,這些限制會是什麼? 如果它們是系統特定的,我該如何訪問它們?


它在很大程度上取決於文件​​系統。 對於ext FS(目前在Linux上使用最多):

  • 最大文件名長度:255個字節
  • 最大路徑長度:無

擴展不是FS知道的,它包含255個字節,包含擴展名(您可以使用沒有任何擴展名的文件名)。

Here是每個FS的這些限制的更詳盡的列表。

您的文件系統也可以擴展,也可以更改您的最大長度。 例如,eCryptFS使用較低文件名的一部分來保留元數據,並將文件名限制為最大長度為143個字符。 請參閱Ubuntu eCryptFS啟動板條目。


這取決於使用的​​文件系統。 例如,ext4的最大文件名長度為256字節,路徑名長度不受限制。

有關更多Here請參閱Here比較


這不依賴於bash; 它取決於操作系統。 在mac上,文件名為0xff,路徑名為0x400左右。 Ubuntu 9的文件名限制為144個字符。

我在Here找到了這個鏈接。 它告訴許多文件系統的路徑和文件名限制。


我請參考其他答案,請提出投票。

在Linux上,文件名和路徑名長度取決於:

要在bash動態獲取這些屬性:

  • 如dogbane所解釋的那樣,創建更長和更長的文件名(或路徑名)
  • 使用由Linux提出的命令getconf ,它也可以在Linux上使用:

    $ getconf NAME_MAX /mnt/sda2/
    255
    $ getconf PATH_MAX /mnt/sda3/
    4096
    

僅供參考,在Docker上,文件名限制目前為242個字符


在臨時目錄中,運行:

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。


  1. 文件的絕對路徑名中的字符數是否有限制?

就在這裡。

請參閱sfpLinux上的文件名長度限制問題的答案 在服務器故障

簡而言之:

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

並為:

  1. 文件名(沒有擴展名)的字符數是否有限制?

在相同的鏈接答案中:

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

在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




maxlength