Ограничение длины имени файла в bash


следующие вопросы предназначены только для bash и linux:

  1. существует ли ограничение на количество символов в абсолютном пути к файлу?
  2. есть ли ограничение на количество символов для имени файла (без расширения) только?

Если да, то каковы могут быть эти пределы? Как я могу получить к ним доступ, если они являются системными?

9 63

9 ответов:

Это очень зависит от файловой системы. Для ext FS (в настоящее время наиболее часто используется в Linux):

  • максимальная длина файла: 255 байт
  • максимальная длина пути: нет

расширение-это не то, о чем знает FS, это 255 байт, расширение включено (вы можете иметь имена файлов без каких-либо расширений).

здесь является более исчерпывающим списком этих ограничений, за FS.

также могут быть расширения ваша файловая система, которая также может изменить вашу максимальную длину. Например, eCryptFS, который использует часть нижнего имени файла для хранения метаданных и ограничивает имя файла максимальной длиной 143 символа. Смотрите Ubuntu eCryptFS launchpad запись.

во временном каталоге выполните:

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 длина имени файла и пути зависит от :

чтобы динамически получить эти свойства в Баш:

  • создать имя файла (или путь) длиннее и длиннее, Как пояснил dogbane
  • используйте команду getconf как предложил Тим это также доступно в Linux:

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

в одной спецификации UNIX упоминается NAME_MAX и PATH_MAX константы в ограничения.h Это можно прочитать с pathconf. Однако это очень зависит от файловой системы, и вы вряд ли достигнете такого предела.

Примечание: как программист, вы не должны жестко закодировать эти ограничения. Вы должны использовать динамическое распределение, чтобы оно всегда работало, пока базовая система позволяет все, что вы делаете.

  1. существует ли ограничение на количество символов в абсолютном пути к файлу?

Да, есть.

посмотреть ответ по СФП на вопрос ограничения длины файла в linux? на сервереошибка

короче:

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

и:

  1. есть ли ограничение на количество символов для имени файла (без расширение) только?

в том же связанном ответе:

#define NAME_MAX         255    /* # chars in a file name */

Это зависит от используемой файловой системы. Например, ext4 имеет максимальную длину имени файла 256 байт и неограниченную длину пути.

посмотреть сравнение файловых систем дополнительные.

Это не Баш-зависимая, и зависит от операционной системы. На mac его 0xff для имени файла и 0x400 или около того для имени пути. Ubuntu 9 имеет ограничение в 144 символа для имен файлов.

Я нашел эту ссылку в Википедия. Он сообщает ограничения пути и имени файла для многочисленных файловых систем.

FYI, на ДОКере, ограничение имени файла в настоящее время 242 символов.