Linux слишком длинное имя файла

Траблы с длинными именами в кириллице

Я сделал бэкап директории, которая на винде через ssh. От rsync пришлось отказаться, так как она плохо работала с длинными путями к файлам. Поэтому на стороне винды использовал syncovery. Файлы бэкапятся по ssh на линуксовый ext4 раздел.

На компе, откуда они бэкапятся, любили давать файлом максимально длинные имена. Таким образом, там есть файлы, у которых имя состоит из 255 символов. Причем, в кириллице. Винда там — семерка.

И все отработало на вид нормально! Но. Получилось, что имя файла занимает больше 255 байт, а ограничение ext4 — 255 байт.

Я не знаю, почему оно работает и где хранит «лишние» байты названия. Как оно сохранило такие длинные имена файлов — затрудняюсь ответить. По ls они выводятся нормально. cat,rm работает (и на том спасибо). Но скопировать их невозможно: слишком длинное имя. Перенаправить вывод cat в файл с таким длинным именем — не получается. rsync тоже не работает. Я даже подебажил немножко и выяснил, что фейлится системный вызов lstat, с ошибкой — слишком длинное имя.

Так же, под линуксом невозможно обычными средствами создать такой файл:

Как создаются эти файлы при копировании через ssh — загадка. Наверное, ssh использует не open, а что-то другое.

Вопросы: Насколько опасно иметь такие длинные файлы? Не может ли это повредить ext4? Как бы их все же скопировать? Хотелось раз в неделю делать rsync в другой каталог, и он делается, но файлы с длинными именами игнорируются. Почему лажает вызов lstat? Что вообще происходит? Это какая-то лажа, так быть не должно.

Читайте также:  Decorate office with no windows

Источник

Длинные имена файлов

Всем привет переношу файлопомойку с винды на линукс. Столкнулся с проблемой «очень длинных имён файлов». Похоже, счёт идет не на символы, а на байты (гугление это подтверждает). Внимание, вопрос: мне таки придётся использовать винду или есть какое-то решение этой проблемы? (усекновение имени — не решение в данной ситуации)

ext2/3/4,reiser,xfs,jfs — все поддерживают 255 символов в имени файла (или 127 в UTF8) — куда вам больше??

Поправочка: 127 русских букв, закодированных в UTF8.

UTF8 — однобайтовая кодировка, так что ASCII в UTF8 = ASCII 🙂

ФС те, которые поддерживаются CentOS 5.4 — то есть ext2/3, ext4 без mkfs.ext4, xfs на положении ext4.

127 букв — внезапно оказалось мало. Есть у пользователей такие имена файлов:

«Котов АН Моделирование дорожного движения на многополосной магистрали при помощи двумерного вероятностного клеточного автомата с тремя состояниями, 2008 (диссертация)»

Усекновение — не вариант. На винде такое имя файла обрабатвается корректно

$ echo «Котов АН Моделирование дорожного движения на многополосной магистрали при помощи двумерного вероятностного клеточного автомата с тремя состояниями, 2008 (диссертация)» | wc -c

$ touch «Котов АН Моделирование дорожного движения на многополосной магистрали при помощи двумерного вероятностного клеточного автомата с тремя состояниями, 2008 (диссертация)»

$ ls Котов*
Котов АН Моделирование дорожного движения на многополосной магистрали при помощи двумерного вероятностного клеточного автомата с тремя состояниями, 2008 (диссертация)

Вроде создался файл. ext3.

Если очень нужно, то можно поставить однобайтную локаль. Хотя да, не решение.

Источник

Ограничения длины имени файла на Linux?

Есть ли какие-либо ограничения на длину файла или пути в Linux?

См. Страницу Википедии о сравнении файловых систем , особенно в столбце Максимальная длина имени файла .

Читайте также:  Останутся ли данные после обновления windows 10

Вот некоторые ограничения длины имени файла в популярных файловых системах:

Я читал здесь, что ограничение длины пути в системных заголовках. Ограничение длины имени файла тоже там. В моей системе это файл:

и C-lang определяет:

Я имею в виду другие ответы, пожалуйста, проголосуйте за них.

Есть ли какие-либо ограничения на длину файла или пути в Linux?

Да, длина имени файла и пути ограничена:

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

  • Используйте функции pathconf и fpathconf как предложено Майклом Аароном Сафяном
  • Создайте имя файла (или путь к файлу ) длиннее и длиннее, как объяснено dogbane

Используйте команду, getconf предложенную Тимом, которая также доступна в Linux:

И ради экономии времени (и привязки его к памяти):

ext2, ext3, ext4, zfs: без ограничений пути; Ограничение имени файла 255 байт.

Это длины имен файловых систем. У самого «linux» тоже есть. Например, из бит / stdio_lim.h:

Там нет никакого способа , чтобы определить максимальную длину путей на Linux переносимым способом. В моей системе:

Но я могу легко создавать пути намного длиннее, чем 4096 символов. Вместо этого смотрите PATH_MAX как нижнюю границу. Вы гарантированно сможете создавать пути так долго, но вы также можете создавать гораздо более длинные.

Вы всегда должны использовать pathconf или какую-либо функцию, подобную этой, чтобы получить значение времени выполнения для указанных элементов, поскольку на этой странице сказано, что:

Однако следует отметить, что многие из перечисленных пределов не являются инвариантными, и во время выполнения значение предела может отличаться от значений, указанных в этом заголовке, по следующим причинам:

Предел зависит от имени пути.

Предел различается между компиляцией и машинами времени выполнения.

По этим причинам приложение может использовать функции fpathconf (), pathconf () и sysconf () для определения фактического значения лимита во время выполнения.

Источник

Длинные имена

Укоротить длинные имена до размера K символов, а те имена, которые короче K символов дополнить восклицательными знаками
Дан список из N имён. Необходимо укоротить длинные имена до размера K символов, а те имена, которые.

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

150 знаков если попробовать скопировать его в другую папку.

Длинные имена файлов
Здравствуйте. Подскажите, можно ли решить проблему. Решил систематизировать все файлы на рабочем.

Длинные имена исходных файлов
Доброго времени суток. Опишу суть проблемы: поймал в систему какую-то гадость. Перед тем, как.

Dmitry, да он подключен и смонтирован в /mnt

Добавлено через 1 час 25 минут
Dmitry, ваш способо не робит, заменил /media/SAMSUNG на /mnt, а результата ноль. Также пробывал в /home монтировать, тоже не к чему не привело, ошибка осталось. Неужели под 12.04 нет поддержки длинных имён

Dmitry, Я так понимаю, что у чела проблема в длинных именах каталогов и вложенных каталогов: Абсолютное имя файла (включая имена путей) получается слишком длинным.
Где-то давненько читал, что в NTFS максимальная длина имени равна 1024. Похоже, что это проявление данного ограничения — в общую длину имени файла вписываются и пути до него (не зря же нельзя использовать, например, символ «/» в имени файла!).
Ещё раз повторюсь: урежьте длину имён каталогов и собственно файла: совсем не обязательно в название пихать половину содержимого. И да, краткость — сестра таланта.

Чёт вспомнилось: «Сказка о царе Салтане, о сыне его славном и могучем богатыре князе Гвидоне и о прекрасной царевне-лебеди» (с) Пушкин, А.С.

Источник

Читайте также:  Как устанавливают windows при продаже ноутбука
Оцените статью