- Архивация через zip списка папок по-отдельности
- 3 ответа 3
- Использование tar в Linux и FreeBSD для работы с архивами
- Создание и распаковка архивов
- Создать
- Распаковать
- Форматы
- gz
- bz2
- gzip
- tgz
- xz
- Описание ключей tar
- Команды для действия
- Дополнительные опции
- Примеры
- Распаковать в определенную папку
- Распаковка без вложенной папки
- Указать конкретный файл или каталог для распаковки
- Исключение файлов по маске
- Работа с архивами, разбитыми на части
- Создание tar из отдельных файлов с последующим его архивированием
- ZIP
- Windows
- Архивирование нескольких папок в разные архивы через терминал.
- Похожие темы
Архивация через 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 с синтаксисом:
Форматы
Утилита 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. |
* актуальный список опций можно получить командой 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-файла:
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)