Страницы

Поиск по вопросам

воскресенье, 29 декабря 2019 г.

Как упаковать каталоги в отдельные архивы?

#linux #ubuntu #bash


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

Упаковать нужно с помощью программы zip.

Пытался написать простой bash-скрипт:

#!/bin/bash

echo
for folder in * # Не знаю как обознать все папки
do
zip -m $file.zip $folder
done
echo
exit 0

    


Ответы

Ответ 1



#!/bin/bash # Зипуем все поддиректории for folder in * do if [ -d $folder ] then # Это директория - зипуем её echo "Зипуем поддиректорию $folder" zip -r ${folder}.zip $folder > /dev/null fi done echo Работа завершена

Ответ 2



Обойти все папки в текущем каталоге позволяет конструкция for d in */; do; ...; done Тем самым скрипт примет следующий вид: #!/bin/bash for d in */ do echo "Zipping folder \"$d\"..." zip -m $d.zip $d done Имейте в виду, что скрипт "не видит" скрытые каталоги (имена которых начинаются с точки) и работает не вполне корректно, если в текущем каталоге нет подкаталогов. Всех этих недостатков лишён следующий скрипт, использующий в своей работе команду find: #!/bin/bash for d in $( find . -maxdepth 1 -type d ! -path . ) do echo "Zipping folder \"$d\"..." zip -m $d.zip $d done Первый скрипт обрабатывает также символические ссылки, второй их пропускает. Если их также необходимо обрабатывать, нужно добавить команде find ключ -L: find -L . -maxdepth 1 -type d ! -path .

Комментариев нет:

Отправить комментарий