Траблы с длинными именами в кириллице
Я сделал бэкап директории, которая на винде через ssh. От rsync пришлось отказаться, так как она плохо работала с длинными путями к файлам. Поэтому на стороне винды использовал syncovery. Файлы бэкапятся по ssh на линуксовый ext4 раздел.
На компе, откуда они бэкапятся, любили давать файлом максимально длинные имена. Таким образом, там есть файлы, у которых имя состоит из 255 символов. Причем, в кириллице. Винда там — семерка.
И все отработало на вид нормально! Но. Получилось, что имя файла занимает больше 255 байт, а ограничение ext4 — 255 байт.
Я не знаю, почему оно работает и где хранит «лишние» байты названия. Как оно сохранило такие длинные имена файлов — затрудняюсь ответить. По ls они выводятся нормально. cat,rm работает (и на том спасибо). Но скопировать их невозможно: слишком длинное имя. Перенаправить вывод cat в файл с таким длинным именем — не получается. rsync тоже не работает. Я даже подебажил немножко и выяснил, что фейлится системный вызов lstat, с ошибкой — слишком длинное имя.
Так же, под линуксом невозможно обычными средствами создать такой файл:
Как создаются эти файлы при копировании через ssh — загадка. Наверное, ssh использует не open, а что-то другое.
Вопросы: Насколько опасно иметь такие длинные файлы? Не может ли это повредить ext4? Как бы их все же скопировать? Хотелось раз в неделю делать rsync в другой каталог, и он делается, но файлы с длинными именами игнорируются. Почему лажает вызов lstat? Что вообще происходит? Это какая-то лажа, так быть не должно.
Источник
Длинные имена файлов
Всем привет переношу файлопомойку с винды на линукс. Столкнулся с проблемой «очень длинных имён файлов». Похоже, счёт идет не на символы, а на байты (гугление это подтверждает). Внимание, вопрос: мне таки придётся использовать винду или есть какое-то решение этой проблемы? (усекновение имени — не решение в данной ситуации)
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?
См. Страницу Википедии о сравнении файловых систем , особенно в столбце Максимальная длина имени файла .
Вот некоторые ограничения длины имени файла в популярных файловых системах:
Я читал здесь, что ограничение длины пути в системных заголовках. Ограничение длины имени файла тоже там. В моей системе это файл:
и 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. Похоже, что это проявление данного ограничения — в общую длину имени файла вписываются и пути до него (не зря же нельзя использовать, например, символ «/» в имени файла!).
Ещё раз повторюсь: урежьте длину имён каталогов и собственно файла: совсем не обязательно в название пихать половину содержимого. И да, краткость — сестра таланта.
Чёт вспомнилось: «Сказка о царе Салтане, о сыне его славном и могучем богатыре князе Гвидоне и о прекрасной царевне-лебеди» (с) Пушкин, А.С.
Источник