LINUX.ORG.RU

Сохранять файлы с именами в 346 знаков

 , ,


1

1

Требуется сохранить из браузера в автоматическом режиме большое число файлов длиной ~346 знаков ASCII. Ext4 такую длину не поддерживает — разве что пересобирать драйвер в ядре. И другие файловые системы тоже, вроде, не больше 255. Поэтому вопрос: как обойти ограничение?

Можно ли сделать драйвер FUSE, который работал бы подобно fuse-posixovl: создавал файлы с короткими именами, сохранял короткие и длинные в специальный файл, а всем программам, обращающимся к файловой системе «fuse-longname», показывал бы длинные имена? Есть ли готовые примеры драйверов fuse, из которых можно быстро сделать подобное?

Ответ: https://github.com/i-rinat/longnamefs делает именно это. ./longnamefs --backend сохранять_файлы_и_имена_сюда/ монтировать_сюда/ Правда, ограничение для FUSE 1024 байта.

★★★★★

Последнее исправление: question4 (всего исправлений: 5)

Ответ на: комментарий от Vsevolod-linuxoid

ReiserFS

Википедия пишет «4032 bytes, limited to 255 by Linux VFS». Что это значит?

И заодно вопрос: если cмонтировать файл и создать в нём ReiserFS, можно ли сделать его динамически растущим? Или только заранее создать фиксированный размер?

question4 ★★★★★
() автор топика
Последнее исправление: question4 (всего исправлений: 1)

Скачаю вгетом с переименованием.

ya-betmen ★★★★★
()
Последнее исправление: ya-betmen (всего исправлений: 1)
Ответ на: комментарий от Vsevolod-linuxoid

Мда… до чего же тупо, но видимо придется использовать MS Windows на NTFS…

Там ограничение 255 символов 2-байтного юникода.

question4 ★★★★★
() автор топика
Ответ на: комментарий от Vsevolod-linuxoid

NTFS кстати действительно поддерживает имена длиннее чем 255. Но сама Винда тоже ограничивает искусственно в 255, видимо для каких то целей совместимости и унификации с каким-нибудь легаси, ровно так же как это делается и в Linux VFS.

bonta ★★★★★
()
Ответ на: комментарий от question4

Там просто ограничение в 255 символов на длину пути к файлу. А сколько байт занимает символ - не важно.

bonta ★★★★★
()
Ответ на: комментарий от question4

Что это значит?

touch: cannot touch '...': File name too long

question4 ★★★★★
() автор топика
Ответ на: комментарий от bonta

Там просто ограничение в 255 символов на длину пути к файлу.

Общего пути? Со всеми директориями?

question4 ★★★★★
() автор топика

Сохраняй файл с номером вместо названия, записывай соответствие номера названию.

@sin_a, как это автоматизировать средствами браузера? Есть готовые аддоны? Примеры скриптов для ScriptMonkey?

question4 ★★★★★
() автор топика
Ответ на: комментарий от question4

Не, я не знаю готового решения, это было только направление. Которое, насколько я понимаю, по твоей ссылке и реализуется.

Вообще, на мой взгляд, хранить информацию в названиях файлов не следует. Это низкий уровень, не для людей (хотя на текущий момент – увы…).

sin_a ★★★★★
()
Ответ на: комментарий от ex-kiev

t.me. Прокрутил ленту из конца в конец, открыл Page Info -> Media, выделил и сохранил все фотографии. Видео с превью тоже сохраняет.

question4 ★★★★★
() автор топика
Ответ на: комментарий от sin_a

хранить информацию в названиях файлов не следует

В данном случае это — хеши, и очень избыточные.

question4 ★★★★★
() автор топика
Ответ на: комментарий от greenman

А благодарить уместнее @i-rinat -a

Ну да, ему тоже спасибо. Забыл написать.

question4 ★★★★★
() автор топика

А откуда вообще возникла задача хранить файл с таким длинным именем? Мб твою задачу можно решить как-то иначе? Например сделать sqlite базу с полными именами файлов, а на диск складывать их как <file_id>.<твое расширение>

Aswed ★★★★★
()
Ответ на: комментарий от Aswed

А откуда вообще возникла задача хранить файл с таким длинным именем?

Задачи хранить не было. Есть задача сохранить файл из браузера. Средства аддонов и самого браузера берут имя из URL или заголовка. И выдают ошибку, если оно слишком длинное. Если на странице десяток картинок — сохранить вручную не проблема. С сотней уже муторно.

Дальше скрипт переименует файлы, и их можно копировать на обычные ФС.

question4 ★★★★★
() автор топика
Ответ на: комментарий от question4

Дальше скрипт переименует файлы, и их можно копировать на обычные ФС.

если это хеш какой смысл его хранить как plain? делай дерево епт… но по факту ты изобретаешь какой то cornucopia

anonymous2 ★★★★★
()
Ответ на: комментарий от anonymous2

Проблема была в том, что браузер автоматически подставляет слишком длинные имена. Есть идеи, как автоматически заменять их на более короткие?

question4 ★★★★★
() автор топика
Последнее исправление: question4 (всего исправлений: 1)
Ответ на: комментарий от question4

Проблема была в том, что браузер автоматически подставляет слишком длинные имена. Есть идеи, как автоматически заменять их на более короткие?

можно пнуть удаленную сторону чтобы переписали javascript или что там «content-disposition: file; filename=»
можно переписать плагин для браузера
можно переписать модуль ядра ФС, они слишком экономят на 255 символах, потом распиарить свой EXT1024 на РФ рынке и продать
можно накостылять FUSE proxy и сделать длинное имя на хеш с деревом подкаталогов EF/DC/4F/3E..

anonymous2 ★★★★★
()
Последнее исправление: anonymous2 (всего исправлений: 1)

Сохранять файлы с именами в 346 знаков

грешно.

Это прям совсем-совсем плохо и не надо делать.

40 байт достаточно на то, чтобы уложить все файлы человечества без повторов.

max_lapshin ★★★★★
()
Ответ на: комментарий от max_lapshin

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

question4 ★★★★★
() автор топика

Есть какая-то специальная причина для хранения файлов именно в fs, а не локальном object storage, например?

i586 ★★★★★
()
Ответ на: комментарий от i586

Хех. Когда-то столкнувшись с той же проблемой, что и ТС, взял я и настроил minio - и обнаружил, что он (по умолчанию, но я не стал углублялся) именно что создаёт по одному файлу на один объект, с таким же именем.

(В итоге плюнул, т.к. на стороне создававшей файлы с длинющими именами всё равно нельзя создать их в локальной ФС - вот такой вот парадокс костылей поверх NTFS, которые майкрософт наворотил в UWP.)

token_polyak ★★★★★
()
Последнее исправление: token_polyak (всего исправлений: 5)
Ответ на: комментарий от i586

Есть какая-то специальная причина для хранения файлов именно в fs, а не локальном object storage, например?

Как сохранять из браузера не в fs, а в object storage?

question4 ★★★★★
() автор топика
Ответ на: комментарий от question4
  1. если ты сохраняешь руками, то руками и меняй названия
  2. если автоматически, то напиши три строчки кода, которые подрезают до нужной длины
max_lapshin ★★★★★
()
Ответ на: комментарий от max_lapshin

Где писать и какой код? Для определённости — сохраняю все файлы из «Информации о странице» (Page Info), раздел «Мультимедиа».

question4 ★★★★★
() автор топика
Ответ на: комментарий от i586

Как именно? По каким словам искать документацию?

question4 ★★★★★
() автор топика
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.