Архивирование всех папок в директории

Программирование на sh, быть может немного про альтернативные языки
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
AlkoGekS
сержант
Сообщения: 152
Зарегистрирован: 2007-05-22 11:30:29
Контактная информация:

Архивирование всех папок в директории

Непрочитанное сообщение AlkoGekS » 2010-09-13 11:41:14

Добрый день товарищи, есть к вам вопросик!
Нужно делать ежедневные бекапы большого количества папок. Все папки расположены в одной директории, поэтому на данный момент архивируется все одним архивом (~150 гигабайт)... что очень не удобно.
Хотелось бы реализовать такую систему:
В определенное время запускается скрипт и архивирует каждую папку в указанной директории в отдельный архив tar.gz с указанием имени папки и даты создания архива.
Как это реализовать? Подскажите пожалуйста.

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
zeus4all
сержант
Сообщения: 261
Зарегистрирован: 2009-10-07 18:48:34
Откуда: Далекий космос

Re: Архивирование всех папок в директории

Непрочитанное сообщение zeus4all » 2010-09-13 12:05:16

если количество субдиректорий и их названия не изменяются динамически то что мешает создать руками все скрипты по 1 и в крон, если меняется - то не знаю, может быть както парсить вывод там ls может быть, и попробовать это пихать в скрипт,хм...не силен я в программировании, поетому с выводом примеров у меня пусто :pardon: .
Историю пишут победители, поэтому в ней не упоминаются проигравшие. (с) Артур Дрекслер
Я знаю только то, что ничего не знаю. (с) Сократ
Если тебе плюют в спину, значит ты впереди. (с) Конфуций

Аватара пользователя
terminus
майор
Сообщения: 2305
Зарегистрирован: 2007-10-29 11:27:35
Откуда: Рига

Re: Архивирование всех папок в директории

Непрочитанное сообщение terminus » 2010-09-13 12:30:55

Код: Выделить всё

#!/bin/sh

cd /directory/to/backup

DATE = `date -j "+ %Y%m%d"`
#20100913

LIST = `ls -1`

	for ELEMENT in $LIST
	do

	tar -cfz /hrere/to/store/backups/$DATE-$ELEMENT.tar.gz $ELEMENT

	done

exit 0
:unknown:
Модель: AST-PM-105/0044; Тип: Универсальный, ремонтный; Название: Терминус; Род повреждения: Распад функций; Выводы: Сдать на слом.


Аватара пользователя
terminus
майор
Сообщения: 2305
Зарегистрирован: 2007-10-29 11:27:35
Откуда: Рига

Re: Архивирование всех папок в директории

Непрочитанное сообщение terminus » 2010-09-13 13:49:01

/bin/sh есть в любой системе.
Модель: AST-PM-105/0044; Тип: Универсальный, ремонтный; Название: Терминус; Род повреждения: Распад функций; Выводы: Сдать на слом.

Аватара пользователя
AlkoGekS
сержант
Сообщения: 152
Зарегистрирован: 2007-05-22 11:30:29
Контактная информация:

Re: Архивирование всех папок в директории

Непрочитанное сообщение AlkoGekS » 2010-09-13 13:52:40

Код: Выделить всё

server # ./backup.sh
date: invalid option -- j
Try `date --help' for more information.
./backup.sh: line 5: DATE: command not found
./backup.sh: line 7: LIST: command not found
server #

rmn
старшина
Сообщения: 427
Зарегистрирован: 2008-10-03 18:52:02

Re: Архивирование всех папок в директории

Непрочитанное сообщение rmn » 2010-09-13 13:57:55

Код: Выделить всё

DATE=`date +"%Y%m%d"`
LIST=`ls -1`
без пробелов

QuAzI
мл. сержант
Сообщения: 79
Зарегистрирован: 2009-08-04 16:41:09

Re: Архивирование всех папок в директории

Непрочитанное сообщение QuAzI » 2010-09-13 14:09:48

DATE=val и LIST=val без пробелов, иначе оно считает что это команда с двумя параметрами.
Если у вас архив ложится на тот же винт, на котором исходник, почитайте про снапшоты - быстрее, удобнее и меньше нагрузка на винты. Если нет, rsync на другой винт/сервер и там снапшот ;)

Аватара пользователя
AlkoGekS
сержант
Сообщения: 152
Зарегистрирован: 2007-05-22 11:30:29
Контактная информация:

Re: Архивирование всех папок в директории

Непрочитанное сообщение AlkoGekS » 2010-09-13 14:30:23

Спасибо большое всем!
Получился вот такой скрипт (именно то, что я и хотел):

Код: Выделить всё

#!/bin/sh

cd /home/backup_dir

DATE=`date +"%Y%m%d"`

LIST=`ls`

    for ELEMENT in $LIST
    do

    /bin/tar -cf /Backup/Backup_$DATE-$ELEMENT.tar $ELEMENT
    /bin/gzip -9 /Backup/Backup_$DATE-$ELEMENT.tar

    done

exit 0

Аватара пользователя
terminus
майор
Сообщения: 2305
Зарегистрирован: 2007-10-29 11:27:35
Откуда: Рига

Re: Архивирование всех папок в директории

Непрочитанное сообщение terminus » 2010-09-13 14:44:33

Linux что ли? Тогда да, date без -j (это у БСДшников -j).

а с пробелами я точно прошляпил... без пробелов присвоение переменным надо было делать :sorry:
Модель: AST-PM-105/0044; Тип: Универсальный, ремонтный; Название: Терминус; Род повреждения: Распад функций; Выводы: Сдать на слом.

Аватара пользователя
AlkoGekS
сержант
Сообщения: 152
Зарегистрирован: 2007-05-22 11:30:29
Контактная информация:

Re: Архивирование всех папок в директории

Непрочитанное сообщение AlkoGekS » 2010-09-13 15:41:56

Многоплатформенный скрипт мне был нужен просто :)

Аватара пользователя
schizoid
подполковник
Сообщения: 3228
Зарегистрирован: 2007-03-03 17:32:31
Откуда: Украина, Чернигов
Контактная информация:

Re: Архивирование всех папок в директории

Непрочитанное сообщение schizoid » 2010-09-13 15:49:04

если много платформенный, то лучше на sh писать...
ядерный взрыв...смертельно красиво...жаль, что не вечно...

Аватара пользователя
DanGer
рядовой
Сообщения: 18
Зарегистрирован: 2007-01-07 16:59:44
Откуда: Kazakhstan

Re: Архивирование всех папок в директории

Непрочитанное сообщение DanGer » 2010-10-11 8:25:43

Насколько я знаю, tar с ключом "-z" создает архив gz. Если так, можно избежать второй строки:

Код: Выделить всё

/bin/gzip -9 /Backup/Backup_$DATE-$ELEMENT.tar
Не стой на дороге - раздавят!

paix
лейтенант
Сообщения: 863
Зарегистрирован: 2007-09-24 12:41:05
Откуда: dn.ua
Контактная информация:

Re: Архивирование всех папок в директории

Непрочитанное сообщение paix » 2010-10-19 21:18:07

schizoid писал(а):если много платформенный, то лучше на sh писать...
сорри, но если многоплатформенный, то лучше на shell НЕ писать.


python/perl/php/scala...
With best wishes, Sergej Kandyla

masterito
рядовой
Сообщения: 42
Зарегистрирован: 2010-08-19 16:24:17
Откуда: Санкт-Петербург

Re: Архивирование всех папок в директории

Непрочитанное сообщение masterito » 2010-10-20 11:54:21

Все зависит от сложности скрипта - в данном случае sh то что нужно.

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35454
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: Архивирование всех папок в директории

Непрочитанное сообщение Alex Keda » 2010-10-20 19:31:14

paix писал(а):
schizoid писал(а):если много платформенный, то лучше на sh писать...
сорри, но если многоплатформенный, то лучше на shell НЕ писать.


python/perl/php/scala...
ни одного из перечисленных языков нет на IBM AIX что на работе стоит. (если тока перл есть - не уверен, надо глянуть)
но там есть sh - как и на любой UNIX платформе
Убей их всех! Бог потом рассортирует...

paix
лейтенант
Сообщения: 863
Зарегистрирован: 2007-09-24 12:41:05
Откуда: dn.ua
Контактная информация:

Re: Архивирование всех папок в директории

Непрочитанное сообщение paix » 2010-10-20 21:54:57

Alex Keda писал(а):
paix писал(а): сорри, но если многоплатформенный, то лучше на shell НЕ писать.
python/perl/php/scala...
ни одного из перечисленных языков нет на IBM AIX что на работе стоит.
но там есть sh - как и на любой UNIX платформе
только сочувствую... ;)
With best wishes, Sergej Kandyla

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35454
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: Архивирование всех папок в директории

Непрочитанное сообщение Alex Keda » 2010-10-20 22:37:35

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

а посочувствовать я могу тока вам - зоопарк языков содержать/юзать - у вас масса свободного времени которое вы не знаете куда деть, видимо.
Убей их всех! Бог потом рассортирует...

paix
лейтенант
Сообщения: 863
Зарегистрирован: 2007-09-24 12:41:05
Откуда: dn.ua
Контактная информация:

Re: Архивирование всех папок в директории

Непрочитанное сообщение paix » 2010-10-20 23:49:01

О да,
переносимость (о чем шла речь) shell скриптов уровня echo "hello world" просто божественна. Работают на любом unix :)
чуть сложнее - и балалайка.

У меня зоопарка нет. Для более сложной логики - использую python.
With best wishes, Sergej Kandyla

Аватара пользователя
DanGer
рядовой
Сообщения: 18
Зарегистрирован: 2007-01-07 16:59:44
Откуда: Kazakhstan

Re: Архивирование всех папок в директории

Непрочитанное сообщение DanGer » 2010-10-21 5:38:23

А что может быть проще и мультиплатформеннее, чем sh? Мое мнение: если есть возможность - лучше писать на sh, независимо есть ли на управляемых системах python etc.
Не стой на дороге - раздавят!

paix
лейтенант
Сообщения: 863
Зарегистрирован: 2007-09-24 12:41:05
Откуда: dn.ua
Контактная информация:

Re: Архивирование всех папок в директории

Непрочитанное сообщение paix » 2010-10-21 12:18:08

DanGer писал(а):А что может быть проще и мультиплатформеннее, чем sh? Мое мнение: если есть возможность - лучше писать на sh, независимо есть ли на управляемых системах python etc.
Какая в задницу мультиплатформенность скриптов на sh ?
если опции шеловских команд да и сами команды отличаются в разных юниксах.

RTFM. Например, Эрик Реймонд, Искусство программирования для Unix.
With best wishes, Sergej Kandyla

Аватара пользователя
DanGer
рядовой
Сообщения: 18
Зарегистрирован: 2007-01-07 16:59:44
Откуда: Kazakhstan

Re: Архивирование всех папок в директории

Непрочитанное сообщение DanGer » 2010-10-21 12:45:18

Я, конечно могу ошибаться, но sh всега был и остается sh (опустим тот факт, что во FreeBSD это линк на tcsh). И я не заметил каких-то отличий в работе указанного интерпретатора ни в FreeBSD, ни в AIX и в двух-трех линукс - всегда все работало как надо. Хотя, линуксоиды народ неординарный, может у них и sh какой-то неправильный (не UNIX, все-таки).
Может Вы путаете с синтаксисом отдельных утилит в системах? Ну да, у них нет строгого предписания иметь один набор опций и функций.
Не стой на дороге - раздавят!

Аватара пользователя
FreeBSP
майор
Сообщения: 2020
Зарегистрирован: 2009-05-24 20:20:19
Откуда: Москва

Re: Архивирование всех папок в директории

Непрочитанное сообщение FreeBSP » 2010-10-21 12:49:01

во фре csh это линк на tcsh, a sh - это оригинальный шелл борна

на лине вроде как sh - это линк на баш, а ash - это классический sh.. или совместивый с ним shell альмквиста.. кстати, ash и sh вроде в обе стороны совместимы?

Код: Выделить всё

[13:50]~/> whereis ash
ash:
[13:50]~/> ls -li /bin | grep sh
49817 -r-xr-xr-x  2 root  wheel  319468  1 май  2009 csh
49842 -r-xr-xr-x  1 root  wheel  115296  1 май  2009 sh
49817 -r-xr-xr-x  2 root  wheel  319468  1 май  2009 tcsh
в первой колонке иноды
Человек начинает получать первые наслаждения от знакомства с unix системами. Ему нужно помочь - дальше он сможет получать наслаждение самостоятельно ©
Ламер — не желающий самостоятельно разбираться. Не путать с новичком: ламер опасен и знает это!

paix
лейтенант
Сообщения: 863
Зарегистрирован: 2007-09-24 12:41:05
Откуда: dn.ua
Контактная информация:

Re: Архивирование всех папок в директории

Непрочитанное сообщение paix » 2010-10-21 13:25:21

DanGer писал(а): Может Вы путаете с синтаксисом отдельных утилит в системах? Ну да, у них нет строгого предписания иметь один набор опций и функций.
Я ничего не путаю и выражаюсь конкретно.
Вам кстати часто приходится писать на sh/csh без использования "отдельных утилит"? таких как find, sort, awk, sed, tar и т.п. ?

именно поэтому shell скрипты имеют очень низкую переносимость, потому что в чистом виде скрипты на sh/csh - это скрипты уровня "hello world".


open your mind! open your eyes!
With best wishes, Sergej Kandyla

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35454
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: Архивирование всех папок в директории

Непрочитанное сообщение Alex Keda » 2010-10-21 19:58:05

2 paix
вы бредите =)
посомтрите на стартовые скрипты FreeBSD
почти чистый sh c расчётом что утилит максимум что будет /bin и /sbin
========
что касается хело ворлд - 99% скриптов администратора - это именно хело ворлд.
и на каждой новой системе изобретать новый хело ворлд на новом языке - не, это не для меня.

да, и 90% основных опций у основных команд, типа awk/grep/find/etc - они одинаковы.
если вы используете какие-то нестандартные извраты - это ваша проблема.
Убей их всех! Бог потом рассортирует...