web-dev-qa-db-ja.com

bashのファイル名の長さの制限

次の質問は、bashおよびlinuxのみを対象としています。

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

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

68
Sriram

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

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

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

ここ は、FSごとのこれらの制限のより包括的なリストです。

また、最大長を変更できるファイルシステムの拡張機能もあります。たとえば、メタファイルを保持するために下位のファイル名の一部を使用し、ファイル名を最大143文字に制限するeCryptFS。 buntu eCryptFS launchpad entryを参照してください。

60
e-satis

一時ディレクトリで、次を実行します。

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です。

36
dogbane

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
14
tim

私は他の答えを参照し、それらに賛成してください。

Linuxでは、ファイル名とパス名の長さは以下に依存します。

bash でこれらのプロパティを動的に取得するには:

  • dogbane で説明されているように、ファイル名(またはパス名)をますます作成します。
  • Linuxでも利用可能な tim で提案されているgetconfコマンドを使用します。

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

Single UNIX Specificationでは、 limits.hNAME_MAXおよびPATH_MAX定数に言及しています。これらは pathconf で読み取ることができます。ただし、これはファイルシステムに大きく依存しているため、このような制限に達する可能性は低いです。

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

  1. ファイルの絶対パス名の文字数に制限はありますか?

はいあります。

sfpによる回答 質問で Linuxのファイル名の長さの制限? サーバーfaultを参照してください

要するに:

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

そして、

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

同じリンクされた答え:

#define NAME_MAX         255    /* # chars in a file name */
3
David Balažic

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

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

2
Eugene Yarmash

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

このリンクは Wikipedia にあります。多数のファイルシステムのパスとファイル名の制限を伝えます。

2
ncmathsadist

参考までに、Dockerでは、ファイル名の制限は現在 242文字 です。

1
jp.rider63