3

Я пытаюсь найти утилиту или подход, который позволит мне сжать весь каталог в куски. Я знаю, что легко указать, например, что создаваемые архивные файлы должны иметь размер X или меньше, но утилиты архивирования обычно делают это, поэтому вам нужны все архивные файлы, чтобы открыть архив, и это то, что я пытаюсь избежать. Мне нужно иметь возможность указать максимальный размер файла архива, и он добавляет файлы в него до тех пор, пока в следующем файле не будет исчерпано пространство, поэтому он начнет новый файл архива. Таким образом, архивные файлы технически независимы друг от друга.

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

4 ответа4

2

Это концепция, которая меня интересует некоторое время, хотя я еще не успел написать сценарий для нее, так как был немного занят!

У программного обеспечения нет простого способа узнать, к чему что-то сжимать, без предварительного запуска файлов по алгоритму (имейте в виду, что tar - это всего лишь архиватор, а не утилита сжатия, но вы можете использовать его с gzip). Другой (более простой) вариант - продолжать добавлять файлы в архив, а затем каждый раз проверять размер. Я не знаю ни одного готового решения для достижения этой цели, но это может быть реализовано в несколько строк кода!

Основная логика будет выглядеть примерно так:

альтернативный текст

Это зависит от того, какую утилиту вы используете. Некоторые не имеют переключателей, которые позволяют легко удалить файл из архива, поэтому вам может потребоваться добавить вторую переменную ввода для свободы действий. Эта вторая переменная может определить приблизительный максимальный размер файла в каталоге, и, если размер архива больше указанного размера, он добавит его в файл. Если не хватит места, архив закроется и создаст новый. Конечно, вы можете настроить этот алгоритм на бесконечность, гарантируя, что размер следующего файла проверяется и сравнивается с текущим размером архива. Вы, вероятно, также захотите сначала использовать самые большие файлы, так как вы можете видеть, что много логики может пойти на это.

К сожалению, это не полное решение, но я надеюсь, что это хорошая отправная точка!

1

Единственный способ сделать это - угадать размер сжатых файлов. Если все файлы имеют одинаковые типы (текст, изображения и т.д.), То вы, вероятно, сможете довольно точно угадать, насколько большим будет конечный сжатый файл после объединения x их числа.

Я не думаю, что что-то делает то, что вы просите, из коробки, так как это потребует сжатия -> проверить размер -> снова сжать тип поведения.

0

Я предполагаю, что вы копируете большой каталог на стопку компакт-дисков, и вы хотите иметь возможность извлечь файл с компакт-диска, вставив 1 компакт-диск (вместо того, чтобы вставлять 2 или более компакт-диска из мульти -CD архив).

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

После того, как у вас есть список zip-файлов, вы можете начать копирование с верхней части списка, а когда компакт-диск заполнится, извлечь и возобновить копирование с этой точки списка со следующего компакт-диска. Это оставляет немного "потраченного впустую места" в конце каждого компакт-диска. Некоторые люди, если они найдут небольшой файл, расположенный ниже по списку, который помещается в это пространство, вернутся назад и поместят этот маленький файл в пустое место, в противном случае. Несколько человек одержимо пытаются переупорядочить, какой файл идет на какой диск, чтобы максимально упаковать их все.

Этот подход - независимое сжатие каждого файла - жертвует некоторым дисковым пространством, чтобы получить немного удобства.

0

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

cat archive-3.afio archive-4.afio | afio -i -k -

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .