Используя системы Windows в течение долгого времени, я знаю, что в определенный момент, ошибочное окно может появиться, когда файлы и имена папок становятся слишком длинными.
Это произошло со мной, когда я попробовал к файлам резервных копий SFTP от сервера до папки в (например):
D:(Windows drive partition)/Temporary/Projects/2015-06/Websites/Guitar-Site/Images/Logos/Manufacturers/Instruments/Basses/(long file name).png
Как Вы видите, я склонен создавать очень указанные пути к папкам иногда и если имя файла, оказывается, долго также, NTFS не смог сохранять его этот путь.
Я в настоящее время волнуюсь о своих физических резервных копиях, как добавит путь к папке на моем резервном диске /backups/(drive name)/...
ко всем путям к файлам.
Есть ли предел (или подобный) в ext4/Ubuntu, который я должен был бы высматривать?
Макс. длина имени файла составляет 255 байтов. Найденный в страница Wiki для ext4.
И максимальный путь 4 096 символов. Найденный в этом Unix& Вопрос о Linux SE .
, Хотя, я действительно находил эта статья Wiki, которая не указывает макс. путь к файлу в ext4.
Я полагаю, что самый надежный способ определить это с pathconf(".", _PC_PATH_MAX);
функция POSIX, которая определяет максимальный путь для данного пути.
, Поскольку функция предлагает, это может варьироваться между файловыми системами.
я не знаю об утилите командной строки, которая выставляет его все же. Вот минимальный пример C: https://stackoverflow.com/questions/16285623/how-to-get-the-to-get-path-to-the-current-file-pwd-in-linux-from-c/54155296#541552 96
Пределы пути зависят от используемой файловой системы. ответ jtoscarson покрытия ext4, который является значением по умолчанию на Ubuntu, однако можно использовать множество файловых систем на Ubuntu. Для цитирования ответа WerkkreW на serverfault вот некоторые файловые системы и их пределы:
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
Примечание также, что различные файловые системы имеют ограничения, относительно которых тип символа может присутствовать в имени файла. Например, имена файлов в ext4
не могут содержать ПУСТОЙ УКАЗАТЕЛЬ и /
. См. также, статья Wikipedia для сравнения файловой системы .
Примечание также, которое файловые системы Linux должны учесть определения POSIX :
3.266 Пути
символьная строка А, которая используется для идентификации файла. В контексте Станд. IEEE 1003.1-2001, путь состоит из, самое большее, {PATH_MAX} байты, включая завершающийся пустой байт. Это имеет дополнительную наклонную черту начала, сопровождаемую нулем или большим количеством имен файлов, разделенных наклонными чертами. Путь может дополнительно содержать одну или несколько запаздывающих наклонных черт. Несколько последовательных наклонных черт считаются тем же как одной наклонной чертой.
От limits.h:
максимальное количество {PATH_MAX}
байтов в пути, включая завершающийся нулевой символ. Минимальное Допустимое значение: максимальное количество {_POSIX_PATH_MAX}
{_POSIX_PATH_MAX}
байтов в пути. Значение: 256
Как @sergiy-kolodyazhnyy сказано, максимальная длина имени файла будет зависеть от файловой системы, и подавляющее большинство ограничивают длины имени файла 255 байтами.
А известный пропуск из его диаграммы является оптическими средами. В то время как UDF и расширения Rock Ridge имеют тот же предел с 255 символами для имен файлов, ISO9660 без Rock Ridge и Joliet, у обоих есть намного более строгие пределы, с которыми можно на самом деле столкнуться при выполнении чего-то как резервное копирование youtube-dl
загрузки.
имена файлов Joliet ограничены или 64 кодовыми точками UTF-16 или 103 из них, если Ваша осваивающая диск программа имеет опцию повредиться от спецификации способами, которые, кажется, не наносят ущерба на практике.
Аналогично, Уровни ISO 9660 2 & 3, без расширений Rock Ridge, ограничены именами файлов или 31 символа или 37, если Вы играете быстро и свободные со спецификацией.
ISO 9660:1999, который является поддерживается genisoimage, но не frontends как K3b, имеет предел любых 207 байтов (без Rock Ridge) или 197 байтов (с Rock Ridge).
(Источник: genisoimage
страница справочника)
Что касается максимальной длины пути , это - большое неправильное представление. нет один для большинства файловых систем Linux.
существует константа, именованная PATH_MAX
, но это только максимум для определенных API POSIX , который Вы можете работа приблизительно .
единственными последовательными исключениями к этому "никакому пределу на длину пути" конвенция является FAT32 и exFAT (32 760 символов Unicode), NTFS и ReFS (32 767 символов Unicode), UDF (1 023 байта) и ISO 9660 (неясный, но я видел, что это указало как 180, 207, 212, или 222 байта).
Это может быть легко продемонстрировано путем запущения этой маленькой программы Python и затем исследования получающихся каталогов.
import os
for X in range(20):
os.mkdir('x' * 255)
os.chdir('x' * 255)
Мой bash
, который отображает целый путь в подсказке, будет иметь troublr с ним. Однако мой zsh
, который отображает только текущую папку в подсказке, не испытает затруднений и даже имеет pwd
встроенный, который может отобразить все 5000 +-byte путь без проблемы.