Linux заархивировать каждую папку отдельно

Архивация через zip списка папок по-отдельности

Как заархивировать папки, названия которых начинаются с «2014» с созданием одного архива, либо, с созданием множества архивов, названия которых совпадают с названием папок? Спасибо.

3 ответа 3

Запаковать папки, начинающиеся с номера года в архив с именем номера этого года:

#!/bin/bash for year in do zip -r $year $year-* >/dev/null 2>&1 done 

На выходе — 2012.zip 2013.zip и т.д.

@mee, об этом написано в man-е к этой программе (можете выполнить команду $ man zip и почитать). опция называется (как и у многих других программ) -q .

#!/bin/bash for y in do for m in do for d in do zip -r $y-$m-$d $y-0$m-0$d >/dev/null 2>&1 done for d in do zip -r $y-$m-$d $y-0$m-$d >/dev/null 2>&1 done done done 

Сохранил и назвал файл scr.sh Как теперь его запустить?

Добавьте ему права на исполнение chmod +x scr.sh, а запуск ./scr.sh если из той же со скриптом директории, либо через полный путь к нему

for i in `ls -1`; do zip $i.zip $i; done 

echo `$i` — что, по-вашему, здесь должно произойти? из зачем нужна конструкция `ls -1` , если достаточно лишь * ? и где точка с запятой межу for и do ? вероятно, вы и не пробовали запускать то, что предлагаете.

@alexanderbarakin я исправил синтаксическую ошибку, протестировал. для echo $i предполагалось, что будет выведено название каталога, перед архивированием, но на практике выяснилось, что zip умеет отображать вывод того, что было добавлено в архив. выглядит это следующим образом: # adding: 2014-12-22/ (stored 0%)

Источник

Использование tar в Linux и FreeBSD для работы с архивами

Обновлено

Обновлено: 14.04.2023 Опубликовано: 18.11.2016

Утилита командной строки tar используется для работы с архивами в операционных системах на базе UNIX. С ее помощью можно архивировать данные и оптимизировать использование дискового пространства.

Создание и распаковка архивов

Рассмотрим общий синтаксис для создания и распаковки архивов.

Создать

Создание выполняется с ключом c. Синтаксис следующий:

tar -czvf archive.tar.gz /home/dmosk

* в данном примере будет создан архив archive.tar.gz домашней директории пользователя (/home/dmosk)
** где z — сжать архив в gzip (без этого параметра, tar не сжимает, а создает так называемый тарбол); c — ключ на создание архива; v — verbose режим, то есть с выводом на экран процесса (очень удобно для наблюдением за ходом работы, но в скриптах можно упустить); f — использовать файл (обязательно указываем, так как в большей степени работаем именно с файлами).

Распаковать

Распаковка выполняется с ключом x с синтаксисом:

Читайте также:  Linux password from hash

Форматы

Утилита tar позволяет работать с архивами различных форматов. Рассмотрим их кратко.

gz

tar -cf archive.tar.gz /files

* при возникновении ошибки This does not look like a tar archive, можно воспользоваться командой gzip -d archive.tar.gz.

bz2

* ключ j отвечает за работу с bz2.

Если система ругается на bzip2, значит нужно его установить:

* соответственно, для CentOS (RPM based), Ubuntu (deb based), FreeBSD (BSD based).

Если видим ошибку tar: Unrecognized archive format, воспользуемся следующей командой:

gzip

* ключ z отвечает за работу с gzip.

tgz

TGZ — tar-архив, сжатый с помощью утилиты gzip. По сути, это тот же tar.gz, и работа с ним ведется такими же командами. Рассмотрим примеры работы с данным форматом.

Для создания архива tgz выполняем:

xz

Это формат сжатия данных с помощью алгоритма LZMA. Для работы с ним устанавливаем:

Теперь можно пользоваться.

tar -cpJf archive.tar.xz /home/user

Описание ключей tar

Команды для действия

Ключ Описание
-A Добавление файлов в архив.
-c Создание нового архивного файла.
-d Показать отличающиеся данные между каталогом-исходником и содержимым архива.
—delete Удалить файлы внутри архива.
-r Добавить файлы в конец архива.
-t Показать содержимое архива.
-u Добавить файлы, которых нет в архиве.
-x Извлечь файлы из архива.

* нельзя использовать несколько вышеперечисленных ключей в одной команде.

Дополнительные опции

Ключ Описание
—atime-preserve Оставить прежнюю метку времени доступа для файла.
-b N Задать размер блока N x 512.
-C Смена каталога. По умолчанию, используется тот, в котором мы находимся.
—checkpoint Показать имена папок при чтении архивного файла.
-G Использование старого формата инкрементального резервирования при отображении или извлечения.
-g Использование нового формата инкрементального резервирования при отображении или извлечения.
-h Не дублировать символьные ссылки. Только файлы, на которые указывают эти симлинки.
-i Игнорировать блоки нулей.
-j Использование bzip2.
—ignore-failed-read Игнорировать не читаемые файлы.
-k При распаковке, существующие файлы не заменяются соответствующими файлами из архива.
-L N Смена магнитной ленты после N*1024 байт.
-m При извлечении игнорировать время модификации объекта.
-M Многотомные архивы.
-N DATE Сохранять только более новые файлы относительно DATE
-O Направление извлекаемого на стандартный вывод.
-p Извлечение защищенной информации.
-P Не отбрасывает начальный слэш (/) из имен.
-s Сортировка файлов при извлечении.
—preserve Аналогично -ps
—remove-files Удалить исходные файлы после добавления в архив.
—same-owner Сохранить владельца при извлечении.
—totals Вывод байт при создании архива.
-v Протоколирование действий — отображение списка объектов, над которыми происходит действие.
-V NAME Создание архива на томе с меткой NAME.
—version Показать версию tar.
-w Требовать подтверждения для каждого действия.
-W Проверка архива после записи.
—exclude FILE Исключить файл FILE.
-X FILE Исключить файлы FILE.
-Z Фильтрует архив с помощью compress.
-z Использование gzip.
Читайте также:  Manjaro linux сброс пароля

* актуальный список опций можно получить командой man tar.

Примеры

Рассмотрим некоторые сценарии использования tar.

Распаковать в определенную папку

tar -C /home/user -xvf archive.tar.gz

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

Распаковка без вложенной папки

Такой способ можно использовать для распаковки в заранее подготовленный каталог. Будет некий эффект переименовывания каталога или аналог «Распаковать здесь»:

tar -C /home/admin/mytar -xvf admin.tar.gz —strip-components 1

* каталог /home/admin/mytar заранее должен быть создан; —strip-components 1 пропустит одну вложенную папку внутри архива.

Указать конкретный файл или каталог для распаковки

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

Рассмотрим пример. Напомним, что можно посмотреть содержимое архива с помощью опции t:

Теперь можно распаковать архив:

tar -zxf /backup/samba.tar.gz mail

* предположим, что внутри архива samba.tar.gz есть что-то и каталог mail. Извлечем мы только последний.

Исключение файлов по маске

Если необходимо пропустить некоторые файлы, вводим команду с ключом —exclude:

tar —exclude=’sess_*’ -czvf archive.tar.gz /wwwsite

* в данном примере мы создадим архив archive.tar.gz, в котором не будет файлов, начинающихся на sess_.

Также можно исключить несколько файлов или папок, добавляя несколько опций exclude:

tar —exclude=’/data/recycle’ —exclude=’*.tmp’ -zcf /backup/samba/2021-08-29.tar.gz /data/

* в данном примере мы исключим папку recycle и файлы, которые заканчиваются на .tmp

Работа с архивами, разбитыми на части

Разбить архив на части может понадобиться по разным причинам — нехватка места на носителе, необходимость отправки файлов по почте и так далее.

Чтобы создать архив, разбитый на части, вводим команду:

tar -zcvf — /root | split -b 100M — root_home.tar.gz

* данная команда создаст архив каталога /root и разобьет его на части по 100 Мб.

В итоге мы получим, примерно, такую картину:

root_home.tar.gzaa root_home.tar.gzac root_home.tar.gzae
root_home.tar.gzag root_home.tar.gzai root_home.tar.gzab
root_home.tar.gzad root_home.tar.gzaf root_home.tar.gzah

Чтобы собрать архив и восстановить его, вводим команду:

cat root_home.tar.gz* | tar -zxv

Создание tar из отдельных файлов с последующим его архивированием

Мы можем собрать файл tar, добавляя по очереди в него файлы, после чего создать сжатый архив. Предположим, у нас 3 файла: file1, file2, file3.

Сначала создадим tar-файл с первым файлом внутри:

tar -cf ./my_archive.tar ./file1

Следующими двумя командами мы добавим в архив файлы file2 и file3:

tar -rf ./my_archive.tar ./file2

tar -rf ./my_archive.tar ./file3

Сожмем содержимое tar-файла:

Читайте также:  Установка playonlinux astra linux

ZIP

Tar не работает с zip-архивами. В системах UNIX для этого используем утилиты zip и unzip. Для начала, ставим нужные пакеты:

* соответственно, для RPM based, deb based, BSD based.

zip -r archive.zip /home/dmosk

* создает архив каталога /home/dmosk в файл archive.zip.

Windows

В системе на базе Windows встроенными средствами можно распаковать только ZIP-архивы. Для работы с разными архивами рекомендуется поставить архиватор, например 7-Zip.

Источник

Архивирование нескольких папок в разные архивы через терминал.

Подскажите, как с помощью терминальной утилиты 7z заархивировать множество папок в 7z формат отдельными архивами за один подход.

 Для упаковки в архив arch.7z файлов file01.foo и file02.foo в директории /home/user/TheDir, выполните в терминале cd /home/user/TheDir/ 7z a arch.7z file01.foo file02.foo 

Циклом по папкам через find с указанием глубины или через глобинг баша.

Есть структура: folder/ subfolder1/ file.txt subfolder2/ file.txt subfolder3/ file.txt Нужно, каждую подпапку в папке одной командой заархивировать в отдельный архив, чтобы получилось: folder/ subfolder1.7z subfolder2.7z subfolder3.7z

Правильно понял что нужно структуру директорий, например:

Раскатать в архивы bar.7zip, ber.7zip, bur.7zip?

Видимо надо циклом пройтись по директориям.

Да именно так, циклами не пользовался ни разу, пойду гляну.

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

7z a arch.7z /home/file01.foo file02.foo && 7z a arch2.7z /home/file1 и тд.

Это тупость конечно, но зато просто для понимания.

Спасибо всем, за наводку на решение задачи, если кому итересно, решил данным образом.

FILES=../files for f in $FILES > do > filename=$(basename "$f") > 7z a -t7z -mx=9 -ms=on ./t > 7z a -t7z -mx=9 -ms=on ./$.7z $f > done 

Если директорий много замучаешься же.

Решение из гугла, проверяйте в сначала тестовом окружении 😀

ls backup | parallel -j5 7z a -mmt=4 "storage/nas/TBL/compressed_backups/<>.7z" <> 

Пишешь, никогда не пользовался и сразу в терминале — это жестоко.

В MC, в одной панели выделяешь каталоги, в «user menu» выбираешь команду архивации, каждый каталог сжимается в свой архив на другую панель. Правда, для 7z кажется там нет команды. Но несложно добавить. И свой получившийся скрипт можешь туда добавить, чтобы в следующий раз не искать, не вспоминать.

Похожие темы

  • Форум Архивирование каталогов в отдельные архивы (2013)
  • Форум Как найти нужный файл через терминал linux, зная, что файл содержит слово? (2017)
  • Форум Создание нескольких папок/файлов через консоль (2017)
  • Форум Архивы и кодировка (2008)
  • Форум Копировать папку в несколько папок (2010)
  • Форум Поиск и архивирование найденных файлов (2019)
  • Форум восстановление большого архива «tar» (2004)
  • Форум Список файлов в архивах внутри архивов внутри архивов (2021)
  • Форум Скрипт для разархивации множества архивов с сервера в сетевой расшареный диск что обеспечивает samba (2016)
  • Форум распаковать архивы в архивах (2023)

Источник

Оцените статью
Adblock
detector