#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 .
Комментариев нет:
Отправить комментарий