Форум программистов, компьютерный форум, киберфорум
Shell, Bash
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
0 / 0 / 0
Регистрация: 07.04.2014
Сообщений: 21
1

Заархивировать каталог заданным алгоритмом сжатия

20.04.2016, 19:52. Показов 2302. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
помогите пожалуйста слабому полу написать скрипт,очень прошу

Разработать программу, производящую архивирование одного из подкаталогов домашнего каталога пользователя в файл, имя которого содержит текущую дату. Архивный файл должен помещаться в каталог /tmp. Имя архивируемого подкаталога задается пользователем в командной строке. Также в командной стоке задаётся способ сжатия – g для gzip, b для bzip2.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.04.2016, 19:52
Ответы с готовыми решениями:

Как заархивировать в zip с максимальной степенью сжатия?
Всем привет! Интересует, 1) есть ли в FreeBSD родные средства для создания архива Zip? 2)...

Как заархивировать каталог ?
кто знает как заархивировть каталог в си++, если можно пример

Как заархивировать каталог?
есть каталог с файлами мне нужно этот каталог записать в сам файл, чтобы каталог который был...

Заархивировать каталог файлов и папок в архив
Всем привет. Есть ли способ программно заархивировать каталог файлов и папок в архив без...

7
Эксперт NIX
3333 / 751 / 252
Регистрация: 28.06.2015
Сообщений: 1,548
Записей в блоге: 16
20.04.2016, 23:40 2
Лучший ответ Сообщение было отмечено ioi как решение

Решение

Скрипт должен лежать в директории в которой находятся архивируемые каталоги.
Bash
1
2
3
4
5
6
7
8
9
10
11
12
#!/usr/bin/env bash
#dirz [dirname] [gb]
if [[ "$2" == "g" ]]; then
        var='gz'
        opt='z'
elif [[ "$2" == "b" ]]; then
        var='bz'
        opt='j'
fi
tar -c${opt}f /tmp/${1}_$(date +%F).tar.${var} ${1}
[[ $? ]] && echo "ахив ${1}_*.tar.${var} создан"
exit
Делаете файл исполняемым
Bash
1
chmod 755 dirz
Запускаете, первый аргумент архивируемая директория без завершающего прямого слеша, второй g или b способ сжатия
Bash
1
2
./dirz dirname g
./dirz dirname2 b
1
0 / 0 / 0
Регистрация: 07.04.2014
Сообщений: 21
21.04.2016, 10:39  [ТС] 3
Ух ты, спасибо большущее!!!)))
0
Эксперт NIX
2795 / 2038 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
21.04.2016, 12:28 4
nezabudka, Несколько замечаний
  • В подобных случаях рациональнее использовать case вместо if/elif (если забыть о getopts)
  • [[ $? ]] зачем было вставлять? Тем более что сама проверка неправильная — всегда будет true (можете подумать и сказать почему)
  • exit не нужен
  • Можно упростить код вспомнив об опции -a (--auto-compress) команды tar
2
Эксперт NIX
3333 / 751 / 252
Регистрация: 28.06.2015
Сообщений: 1,548
Записей в блоге: 16
21.04.2016, 12:44 5
Эт точно, я поторопилась, одинадцатая строчка должна выглядеть так:
Bash
1
(( $? )) || echo "архив создан"
1
Эксперт NIX
2795 / 2038 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
21.04.2016, 12:51 6
nezabudka, зачем? Когда достаточно так
Bash
10
11
tar -aсf /tmp/${1}_$(date +%F).tar.${var} ${1} && 
echo "ахив ${1}_*.tar.${var} создан"
2
Эксперт NIX
3333 / 751 / 252
Регистрация: 28.06.2015
Сообщений: 1,548
Записей в блоге: 16
21.04.2016, 13:25 7
Лучший ответ Сообщение было отмечено ioi как решение

Решение

Так как у нас всего один флаг то обойдемся без getopt/getopts, а воспользуемся
оператором выбора и заменим расширение bz на bz2 что бы сработала опция -a утилиты tar.
Улучшеная версия:
Bash
1
2
3
4
5
6
7
#!/usr/bin/env bash
#dirz [dirname] [gb]
case $2 in
        g) var="gz";;
        b) var="bz2"
esac
tar -acf /tmp/${1}_$(date +%F).tar.${var} ${1} && echo "архив создан"
1
Эксперт NIX
2795 / 2038 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
21.04.2016, 15:56 8
Лучший ответ Сообщение было отмечено ioi как решение

Решение

Bash
3
4
5
6
7
8
case $2 in
    g) var="gz";;
    b) var="bz2";;
    *) echo "ERROR! Use as: $0 <dir_name> <compresssion:[g|b]>"
       exit 1;;
esac
2
21.04.2016, 15:56
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.04.2016, 15:56
Помогаю со студенческими работами здесь

Как заархивировать каталог с файлами через ZLib?
Добрый вечер! Господа, подскажите, как заакхивировать каталог с файлами через ZLib? Нужно создавть...

Написать программу кодировки (сжатия) цифр алгоритмом RLE
Нужно написать программу кодировки(сжатия) цифр алгоритмом RLE. Есть пример но он кодиркет не так...

Перемещение файлов с заданным расширением со всего логического диска в создаваемый каталог
Всем привет! подсобите пожалуйста кто шарит!) Сценарий перемещает временные файлы (.tmp) со...

Создать командный файл для копирования файлов с заданным именем и расширением .PAS и .EXE в созданный каталог
Хотелось бы узнать как создать командный файл для копирования файлов с заданным именем и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru