Я хочу создать архив через программу, которую я пишу на C #, а затем распаковать его.

В архиве будут находиться папки из совершенно разных мест, сгруппированные по 3 основным подразделениям.

В основном, группа A может иметь папки \x \y \z, \x \y \m, \x \p \q, группа B может иметь папки \x \p \r, \x \y \t ... Таким образом, исходное местоположение может дать лишь небольшое указание на разделение, я не могу использовать путь для группировки.

Я надеялся, что смогу использовать опции 7z для размещения папок в разных папках внутри zip, но я не смог найти никаких таких опций, поэтому я подумал, что создам 3 zip внутри одного большого zip

Проблема, которую я вижу, состоит в том, что объем данных большой (сотни, тысячи ГБ), и, насколько я знаю, zip over zip не очень хорошая идея. (типы данных: в основном тип изображения, могут быть в формате TIF или других несжатых форматах, но также могут быть JPG)

Было бы здорово, если бы я мог сделать zip over rar ... Но 7z не использует rar для сжатия, только для декомпрессии.

Я не хочу устанавливать несколько программ - я буду устанавливать только 7z.

Для упаковки у 7z есть следующие опции (с их сайта): 7z, XZ, BZIP2, GZIP, TAR, ZIP и WIM. Я бы использовал один из них для внутреннего архива, а затем опцию 7z для внешнего архива.

Какой самый лучший вариант? (чтобы получить лучший архив, который не создает больший почтовый индекс, чем просто делая все за один проход)

Редактировать: Windows!

1 ответ1

3

Если вы работаете в Linux, вы можете создавать символические ссылки на пути к папкам на жестком диске и добавлять эти папки в архив. Черт возьми, вы можете сделать это в Windows с помощью символических ссылок.

Итак, пример:

У вас есть папки /a , /b , /c и /d (в Windows это будет C:\a и т.д.)

Желаемая структура папок внутри архива:

/SUBDIVISION-1/a
/SUBDIVISION-1/b
/SUBDIVISION-2/c
/SUBDIVISION-3/d

или какое-то произвольное разделение папок между подразделениями.

Поэтому, когда вы идете на сжатие, вы просто

mkdir /SUBDIVISION-1
mkdir /SUBDIVISION-2
mkdir /SUBDIVISION-3

затем

ln -s /a /SUBDIVISION-1/a
ln -s /b /SUBDIVISION-1/b
ln -s /c /SUBDIVISION-2/c
ln -s /d /SUBDIVISION-3/d

и вы можете иметь произвольное количество каталогов в каждом подразделении, от 0 до 1 до N

В Windows вы не можете использовать команду ln ; вам придется использовать команду mklink .

Вам понадобится программа, которая достаточно умна, чтобы переходить по символическим ссылкам (в Linux), но в Windows она должна быть автоматической ... архив не должен просто вставлять туда символическую ссылку; он должен иметь данные, найденные после разыменования символической ссылки. По крайней мере, так и должно быть, если вы используете подсистему Win32 (что, я полагаю, делает 7z).

Версия Windows по неявному запросу от OP (из оболочки cmd.exe ):

mkdir C:\SUBDIVISION-1
mkdir C:\SUBDIVISION-2
mkdir C:\SUBDIVISION-3

затем

mklink /d C:\SUBDIVISION-1\a C:\a
mklink /d C:\SUBDIVISION-1\b C:\b
mklink /d C:\SUBDIVISION-2\c C:\c
mklink /d C:\SUBDIVISION-3\d C:\d

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