Давно пользуясь системами 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, на который мне пришлось бы обратить внимание?
files
filesystem
directory
filename
Prototype700
источник
источник
Ответы:
Максимальная длина имени файла составляет 255 байт. Найдено на странице вики для ext4 .
И максимальный путь 4096 символов. Нашел в этом вопросе Unix & Linux SE .
Хотя я нашел эту вики-статью , в которой не указан максимальный путь к файлу в ext4.
источник
jtoscarson@Tylers-Ubuntu:~$ echo "123abc" | wc -c 7 jtoscarson@Tylers-Ubuntu:~$ echo "123abc" | wc -m 7
-m подсчитывает символы, а -c подсчитывает байты. Причиной, почему это 7 вместо 6, является символ конца строки, который не печатается. Таким образом, общее количество символов в имени файла будет 255.4
дляecho -n "💩" | wc -c
. Создание имени файла с таким именем заняло бы 4 байта, несмотря на то, что это имя имеет длину в 1 графему. «Символ» не является четко определенным понятием (обычно это байт, графема или кодовая точка UNICODE).len(filename.encode())
.Я считаю, что наиболее надежный способ определить это с помощью
pathconf(".", _PC_PATH_MAX);
функции POSIX, которая определяет максимальный путь для данного пути.Как предполагает функция, это может варьироваться между файловыми системами.
Я не знаю утилиты командной строки, которая выставляет это все же. Вот минимальный пример C: /programming/16285623/how-to-get-the-to-get-path-to-the-current-file-pwd-in-linux-from-c / 54155296 # 54155296
источник
Ограничения пути зависят от используемой файловой системы. Ответ jtoscarson охватывает ext4, который используется по умолчанию в Ubuntu, однако вы можете использовать различные файловые системы в Ubuntu. Чтобы процитировать ответ WerkkreW о сбое сервера, вот некоторые из файловых систем и их ограничения:
Также обратите внимание, что различные файловые системы имеют ограничения относительно того, какой тип символа может присутствовать в имени файла. Например, имена файлов в
ext4
не могут содержать NULL и/
. Смотрите также статью в Википедии для сравнения файловых систем .Также обратите внимание, что файловые системы Linux должны учитывать определения POSIX :
Из пределов. Ч :
источник
Как сказал @ sergiy-kolodyazhnyy, максимальная длина имени файла будет зависеть от файловой системы, а подавляющее большинство ограничивает длину имени файла 255 байтами.
Заметное упущение из его таблицы - оптические носители. В то время как расширения UDF и Rock Ridge имеют одинаковое ограничение в 255 символов для имен файлов, ISO9660 без Rock Ridge и Joliet имеют гораздо более строгие ограничения, с которыми вы можете столкнуться, если делаете что-то вроде резервного копирования
youtube-dl
загрузок.Имена файлов Joliet ограничены либо 64 кодовыми точками UTF-16, либо 103 из них, если ваша программа для мастеринга дисков имеет возможность отойти от спецификации способами, которые, как кажется, не причиняют вреда на практике.
Аналогично, уровни 2 и 3 стандарта ISO 9660, без расширений Rock Ridge, ограничены именами файлов из 31 символа или 37, если вы играете быстро и плохо со спецификацией.
ISO 9660: 1999, которая будет поддержана genisoimage но не фронтэнды как K3b, имеет предел либо 207 байт (без Rock Ridge) или 197 байт (с Rock Ridge).
(Источник:
genisoimage
справочная страница)Что касается максимальной длины пути , это большое заблуждение. Нет такой для большинства файловых систем Linux.
Там есть константа с именем
PATH_MAX
, но это только максимум для определенных интерфейсов POSIX , которые вы можете работать вокруг .Единственными вытекающими исключениями из этого соглашения «без ограничения длины пути» являются FAT32 и exFAT (32 760 символов Unicode), NTFS и ReFS (32 767 символов Unicode), UDF (1 023 байта) и ISO 9660 (неясно, но я видел оно указывается как 180, 207, 212 или 222 байта).
Это можно легко продемонстрировать, запустив эту маленькую программу на Python, а затем изучив получившиеся каталоги.
Мой
bash
, который отображает весь путь в приглашении, будет иметь проблемы с ним. Однако myzsh
, которая отображает только текущую папку в приглашении, не будет иметь проблем и даже имеетpwd
встроенную функцию, которая может отображать весь путь длиной более 5000 байт без проблем.источник