次の質問は、bash と Linux のみを対象としています。
- ファイルの絶対パス名に文字数制限はありますか?
- ファイル名(拡張子なし)のみ文字数制限はありますか?
もしそうなら、これらの制限は何でしょうか? システム固有の場合、どうすればアクセスできますか?
ファイルシステムに大きく依存します。ext FS (現在 Linux で最も使用されている) の場合:
拡張子は FS が認識するものではなく、255 バイトで、拡張子が含まれています (拡張子なしのファイル名を使用できます)。
FS ごとのこれらの制限のより完全なリストを次に示します。
また、最大長を変更できるファイル システムの拡張機能が存在する場合もあります。たとえば、下位のファイル名の一部を使用してメタデータを保持し、ファイル名を最大 143 文字に制限する eCryptFS があります。Ubuntu eCryptFS ランチパッドエントリを参照してください。
一時ディレクトリで、次を実行します。
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 です。
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
他の回答を参照します。賛成票を投じてください。
Linux では、ファイル名とパス名の長さは以下によって異なります。
linux/limits.h
コンパイル前に定義されています。これらのプロパティをbashで動的に取得するには:
- ファイルの絶対パス名に文字数制限はありますか?
はいあります。
Linux でのファイル名の長さの制限に関する質問でsfp の回答を参照してください。サーバー障害時
要するに:
#define PATH_MAX 4096 /* # chars in a path name including nul */
そして以下のために:
- ファイル名(拡張子なし)のみ文字数制限はありますか?
同じリンクされた回答で:
#define NAME_MAX 255 /* # chars in a file name */
これは bash 依存ではありません。それはOSに依存します。Mac では、ファイル名は 0xff、パス名は 0x400 程度です。Ubuntu 9 では、ファイル名に 144 文字の制限がありました。
ウィキペディアでこのリンクを見つけました。多数のファイルシステムのパスとファイル名の制限を示します。
使用するファイルシステムによって異なります。たとえば、ext4 のファイル名の最大長は 256 バイトで、パス名の長さは無制限です。
詳細については、ファイル システムの比較を参照してください。