У меня проблема. Мне нужно сжать корневую папку, но в ее подпапках много файлов ZIP / BZIP / TAR. Может кто-нибудь показать мне скрипт, который будет искать и разархивировать zip-файл каждой подпапки, а затем 7-zip корневую папку с максимальным сжатием?
Попробуйте написать свое, это весело! : -)
Вот несколько идей и отправных точек:
recompress.sh
. chmod +x recompress.sh
. unzip <fileanme>
, а все tar-файлы с помощью tar xvf <filename>
. Tar имеет автоопределение для типа архива. Так что сделайте две отдельные find /folder -name ...
петли. Или найдите инструмент, который может обрабатывать все типы архивов: -) p7zip
. Или, если вы хотите настроить уровень сжатия и другие вещи, используйте 7zr
напрямую. Редактировать: На самом деле это может быть намного проще, если вы начнете с пошагового построения команд и изучения ошибок / выходных данных каждой из них.
Вы можете написать скрипт или сделать это простым способом, используя поиск Наутилуса.
.zip
→ выделите все zip-файлы и выберите → «Извлечь здесь» Когда закончите, сожмите корневую папку.
быстро & amp; dirty :))
PS: мне нравится терминал, но иногда графический интерфейс пользователя работает быстрее.
PPS: используйте tar.xz
для сжатия корневой папки.
Это должно быть отмечено это 7z
не уважает полномочия правильно, в которых это не хранит владельца/группу файла и т.д. Это идеально не подходит для резервных копий на Unix, таким образом, я использовал tar.7z
в сценарии ниже, который все еще даст хорошее сжатие. Если Вы действительно хотите Вам, мог бы просто указать .7z
, но Вы потеряете данные полномочий.
Необходимо будет установить atool
из репозиториев, потому что я использую его для упрощения извлечения различных форматов. Вам также будет нужно p7zip
:
sudo apt-get install atool p7zip
Просто введите следующий сценарий в свой текстовый редактор, сохраните его и сделайте его исполняемым файлом. Затем просто выполните его в желаемой папке (но см. важные примечания ниже, чтобы видеть, как это работает).
(Командная строка находки в этом сценарии используется от этого вопроса здесь.)
#!/bin/bash
find -mindepth 2 -type f -print -exec mv {} . \;
mkdir my_files
aunpack -e * -X my_files/
apack -O-mx=9 imp_files.tar.7z my_files/
mv imp_files.tar.7z /home/$USER/
exit 0
Важные примечания:
Файлы от желаемых подпапок поставляются каталогу, в котором выполняется сценарий, если Вы не хотите добавить строку cd /home/$USER/"$1"
к верхней части сценария и места это в Вашем ~/bin
и затем назовите его с script_name desired_folder
.
Файлы найдены и затем перемещены в pwd (существующий рабочий каталог), и затем новый каталог создается, и они все извлечены к этому. Я использовал aunpack
и apack
от atools пакета, поскольку они позволяют нескольким типам архивирования быть обработанными сразу. См. мой ответ здесь для получения дополнительной информации; aunpack
является большим, поскольку это позволяет Вам извлекать все типы архивных файлов, не будучи должен выполниться отдельно tar
, 7z
, и т.д.
После того, как файлы были извлечены к указанной папке, та папка упаковывается как tar затем 7zip файл с максимальным сжатием (mx=9
). Наконец, тот получающийся файл перемещен в основу Вашей домашней папки.
В сценарии я не удалил файлы, которые выбираются от подкаталогов; можно добавить, что, при необходимости и адаптируют сценарий в соответствии с Вашими потребностями, но я надеюсь, что это полезно для приобретения знаний об основных сценариях.