Ответы:
См. Страницу Википедии о сравнении файловых систем , особенно в столбце Максимальная длина имени файла .
Вот некоторые ограничения длины имени файла в популярных файловых системах:
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
Я читал здесь, что ограничение длины пути в системных заголовках. Ограничение длины имени файла тоже там. В моей системе это файл:
/usr/src/linux-headers-2.6.38-10/include/linux/limits.h
и C-lang определяет:
#define NAME_MAX 255 /* # chars in a file name */
#define PATH_MAX 4096 /* # chars in a path name including nul */
и еще немного.
Я имею в виду другие ответы, пожалуйста, проголосуйте за них.
Есть ли какие-либо ограничения на длину файла или пути в Linux?
Да, длина имени файла и пути ограничена:
linux/limits.h
как указано sfp .Чтобы динамически получить эти свойства:
pathconf
иfpathconf
как предложено Майклом Аароном СафяномИспользуйте команду, getconf
предложенную Тимом, которая также доступна в Linux:
$ getconf NAME_MAX /mnt/sda2/
255
$ getconf PATH_MAX /mnt/sda3/
4096
И ради экономии времени (и привязки его к памяти):
ext2, ext3, ext4, zfs: без ограничений пути; Ограничение имени файла 255 байт.
PATH_MAX = 4096
. Это можно обойти, если ваша программа может использовать относительные пути и вы сначала измените свой рабочий каталог.
Это длины имен файловых систем. У самого "linux" тоже есть. Например, из бит / stdio_lim.h:
# define FILENAME_MAX 4096
locate
.
Там нет никакого способа , чтобы определить максимальную длину путей на Linux переносимым способом. В моей системе:
$ getconf PATH_MAX /
4096
$ getconf _POSIX_PATH_MAX /
4096
Но я могу легко создавать пути намного длиннее, чем 4096 символов. Вместо этого смотрите PATH_MAX
как нижнюю границу. Вы гарантированно сможете создавать пути так долго, но вы также можете создавать гораздо более длинные.
os.pathconf()
модуль Python будет иметь несколько ответов; если порт Python хорош, они должны быть разумными.
Вы всегда должны использовать pathconf или какую-либо функцию, подобную этой, чтобы получить значение времени выполнения для указанных элементов, поскольку на этой странице сказано, что:
Однако следует отметить, что многие из перечисленных пределов не являются инвариантными, и во время выполнения значение предела может отличаться от значений, указанных в этом заголовке, по следующим причинам:
Предел зависит от имени пути.
Предел различается между компиляцией и машинами времени выполнения.
По этим причинам приложение может использовать функции fpathconf (), pathconf () и sysconf () для определения фактического значения лимита во время выполнения.
Это указано в системе limits.h файле заголовка.
Вот один из этих файлов:
cat /usr/include/linux/limits.h
...
#define NAME_MAX 255 /* # chars in a file name */
#define PATH_MAX 4096 /* # chars in a path name including nul */
...
Здесь находятся копии этого файла и значения, которые они определяют:
find /usr | grep limits.h | xargs -I {} grep -H 'NAME_MAX' {}
Выход:
...
/usr/include/linux/limits.h:#define NAME_MAX 255 /* # chars in a file name */
...