@justhabrauser

How to split and merge files inplace?

Как в командной строке нарезать или объединить куски файлов без занятия дополнительного места?
split и cat делают новые файлы. А надо именно перераспределить уже имеющиеся данные по нескольким файлам и наоборот.
Нечто подобное делает fallocate (linux) - тупо резервирует под файл уже имеющиеся свободные блоки.
Вот надо нечто такое же, только с перламутровыми пуговицами.
Под 3 ОС и CLI.
  • Вопрос задан
  • 110 просмотров
Пригласить эксперта
Ответы на вопрос 2
@mayton2019
Ent. Software engineer.
На базе стандартного файлового API скорее всего невозможно. Объясню почему. Linux оперирует файловым API на уровне команд open/close/seek/read/write. Это основа которая работает для всех файловых систем. Если опуститься на уровень какой-то специфичной файловой системы (например vfat) то можно наверное порезать файл на кусочки кратные размеру блока файловой системы без пере-аллокаций. Но это - грязный хак который будет работать только под root и только для specific файловой системы. И только для особых условий (граница блока). Вобщем технически это сделать можно но использование этой утилиты будет носить "разрушительный" характер наподобие утилит parted, fdisk, mkfs.* и прочих. Сильно сомневаюсь что такая утилита будет полезна и востребована. Лучше пользоваться нормальным API.
Ответ написан
saboteur_kiev
@saboteur_kiev Куратор тега Linux
build engineer
Нельзя так сделать.
Можно урезать конкретный файл через truncate, но так чтобы из одного сделать несколько - не выйдет.

fallocate делает не это, он создает файл нужного размера, но не наполняет его данными, просто сообщая файловой системе, сколько места ему нужно. Но fallocate не управляет конкретными областями диска, и нарезать уже существующие данные не может в принципе.

Единственный вариант - считать файл в память, удалить его на диске и записать несколько уже из памяти. Но понятно что размер файла при этом ограничен возможностями. Можно написать. И в любом случае будут операции чтения/записи.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы