What is the maximum length of a file path in Ubuntu?

The max filename length is 255 bytes. Found in the wiki page for ext4.

And a maximum path of 4096 characters. Found in this Unix&Linux SE Question.

Although, I did find this wiki article that does not specify a max file path in ext4.


As @sergiy-kolodyazhnyy said, the maximum filename length will depend on the filesystem and the vast majority limit filename lengths to 255 bytes.

A notable omission from his chart is optical media. While UDF and the Rock Ridge extensions have the same 255-character limit for filenames, ISO9660 without Rock Ridge and Joliet both have much stricter limits that you may actually run up against if you're doing something like backing up youtube-dl downloads.

Joliet filenames are limited to either 64 UTF-16 codepoints or 103 of them if your disc-mastering program has an option to break from the spec in ways which seem to cause no harm in practice.

Likewise, ISO 9660 Levels 2 & 3, without the Rock Ridge extensions, are limited to filenames of either 31 characters or 37 if you're playing fast and loose with the spec.

ISO 9660:1999, which is supported by genisoimage but not by frontends like K3b, has a limit of either 207 bytes (without Rock Ridge) or 197 bytes (with Rock Ridge).

(Source: The genisoimage manpage)

As for the maximum path length, that's a big misconception. There isn't one for most Linux filesystems.

There's a constant named PATH_MAX, but it's only the maximum for certain POSIX APIs, which you can work around.

The only consequential exceptions to this "no limit on path length" convention are FAT32 and exFAT (32,760 Unicode characters), NTFS and ReFS (32,767 Unicode characters), UDF (1,023 bytes), and ISO 9660 (unclear, but I've seen it stated as 180, 207, 212, or 222 bytes).

This can be easily demonstrated by running this small Python program and then exploring the resulting directories.

import os
for X in range(20):
    os.mkdir('x' * 255)
    os.chdir('x' * 255)

My bash, which displays the whole path in the prompt, will have trouble with it. However my zsh, which displays only the current folder in the prompt will have no trouble and even has a pwd builtin that can display the entire 5000+-byte path without issue.


The pathname limits depend on filesystem in use. jtoscarson's answer covers ext4 which is default on Ubuntu, however you can use variety of filesystems on Ubuntu. To cite WerkkreW answer on serverfault, here are some of the filesystems and their limits:

BTRFS   255 bytes
exFAT   255 UTF-16 characters
ext2    255 bytes
ext3    255 bytes
ext3cow 255 bytes
ext4    255 bytes
FAT32   8.3 (255 UCS-2 code units with VFAT LFNs)
NTFS    255 characters
XFS     255 bytes

Note also that various filesystems have limitations as to which type of character can be present in filename. For instance, filenames in ext4 cannot contain NULL and /. See also, Wikipedia article for filesystem comparisons.

Note also that Linux filesystems have to take into consideration POSIX definitions:

3.266 Pathname

A character string that is used to identify a file. In the context of IEEE Std 1003.1-2001, a pathname consists of, at most, {PATH_MAX} bytes, including the terminating null byte. It has an optional beginning slash, followed by zero or more filenames separated by slashes. A pathname may optionally contain one or more trailing slashes. Multiple successive slashes are considered to be the same as one slash.

From limits.h:

{PATH_MAX}

Maximum number of bytes in a pathname, including the terminating null character. Minimum Acceptable Value: {_POSIX_PATH_MAX}

{_POSIX_PATH_MAX}

Maximum number of bytes in a pathname. Value: 256