1

Были заданы похожие вопросы, но я не смог найти именно то, что искал. По сути, у меня есть большой каталог с подкаталогами и множеством файлов, и я хочу рекурсивно войти в каждый каталог и подкаталог и сжать каждый файл по отдельности. Я нашел это решение, но это не совсем то, что я хочу:

find . -type f -execdir zip '{}.zip' '{}' \;

Источник

Это выводит zip-файлы в каталог, откуда они пришли. Однако я хочу, чтобы zip-файлы находились в совершенно отдельном каталоге, но с той же структурой каталогов, в которой были только полученные zip-файлы. Может кто-нибудь помочь с этим?

2 ответа2

1

Вы можете предварительно проложить относительный путь к местоположению zip-файла как:

find . -type f -exec zip -D '../zipdir/{}.zip' '{}' \; 

При необходимости для создания структуры каталогов вы можете сделать:

find . -type d -exec mkdir -p '../zipdir/{}' \;
0

Если вы не женаты на zip-файлах, вы можете просто создать образ squashfs для всего рассматриваемого дерева каталогов, которое также можно монтировать (не открывайте и не просматривайте конкретные zip-файлы, чтобы увидеть, что там). Он также может иметь лучшее сжатие, поскольку он смотрит на все дерево вместе, больше похоже на "сплошной" архив, а не на множество отдельных zip-файлов.

По сути, вам просто нужен пакет squashfs-tools (так он называется в Debian/Ubuntu, может быть, другое имя в разных семействах Linux), затем:

mksquashfs /some/directory  archive.squashfs

и смонтировать / просмотреть / просмотреть его:

mount archive.squashfs /mnt/mountpoint -t squashfs

флаг -t может даже быть необязательным, mount действительно хорош для автоматического определения типов. Также не нужно использовать флаг -o loop , но попробуйте его на всякий случай.

Смотрите http://tldp.org/HOWTO/SquashFS-HOWTO/creatingandusing.html или просто ищите, как использовать squashfs.

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