80

次の質問は、bash と Linux のみを対象としています。

  1. ファイルの絶対パス名に文字数制限はありますか?
  2. ファイル名(拡張子なし)のみ文字数制限はありますか?

もしそうなら、これらの制限は何でしょうか? システム固有の場合、どうすればアクセスできますか?

4

9 に答える 9

76

ファイルシステムに大きく依存します。ext FS (現在 Linux で最も使用されている) の場合:

  • ファイル名の最大長: 255 バイト
  • 最大パス長: なし

拡張子は FS が認識するものではなく、255 バイトで、拡張子が含まれています (拡張子なしのファイル名を使用できます)。

FS ごとのこれらの制限のより完全なリストを次に示します。

また、最大長を変更できるファイル システムの拡張機能が存在する場合もあります。たとえば、下位のファイル名の一部を使用してメタデータを保持し、ファイル名を最大 143 文字に制限する eCryptFS があります。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で説明されているように、ファイル名 (またはパス名) をどんどん長く作成します
  • Linux でも使用できる、timgetconfによって提案されたコマンドを使用します。

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

Single UNIX Specificationには、pathconfで読み取ることができるlimits.hの定数が記載NAME_MAXPATH_MAXます。ただし、これはファイルシステムに大きく依存するため、このような制限に達する可能性はほとんどありません。

注:プログラマーとして、これらの制限をハードコーディングしないでください。動的割り当てを使用する必要があります。これにより、基盤となるシステムが実行していることをすべて許可している限り、動的割り当てが常に機能します。

于 2011-07-04T12:35:11.497 に答える
4
  1. ファイルの絶対パス名に文字数制限はありますか?

はいあります。

Linux でのファイル名の長さの制限に関する質問でsfp の回答を参照してください。サーバー障害時

要するに:

#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 に答える
2

これは bash 依存ではありません。それはOSに依存します。Mac では、ファイル名は 0xff、パス名は 0x400 程度です。Ubuntu 9 では、ファイル名に 144 文字の制限がありました。

ウィキペディアでこのリンクを見つけました。多数のファイルシステムのパスとファイル名の制限を示します。

于 2011-07-04T12:32:32.577 に答える
2

使用するファイルシステムによって異なります。たとえば、ext4 のファイル名の最大長は 256 バイトで、パス名の長さは無制限です。

詳細については、ファイル システムの比較を参照してください。

于 2011-07-04T12:31:56.053 に答える