Страница 1 из 2
Архивирование всех папок в директории
Добавлено: 2010-09-13 11:41:14
AlkoGekS
Добрый день товарищи, есть к вам вопросик!
Нужно делать ежедневные бекапы большого количества папок. Все папки расположены в одной директории, поэтому на данный момент архивируется все одним архивом (~150 гигабайт)... что очень не удобно.
Хотелось бы реализовать такую систему:
В определенное время запускается скрипт и архивирует каждую папку в указанной директории в отдельный архив tar.gz с указанием имени папки и даты создания архива.
Как это реализовать? Подскажите пожалуйста.
Re: Архивирование всех папок в директории
Добавлено: 2010-09-13 12:05:16
zeus4all
если количество субдиректорий и их названия не изменяются динамически то что мешает создать руками все скрипты по 1 и в крон, если меняется - то не знаю, может быть както парсить вывод там ls может быть, и попробовать это пихать в скрипт,хм...не силен я в программировании, поетому с выводом примеров у меня пусто

.
Re: Архивирование всех папок в директории
Добавлено: 2010-09-13 12:30:55
terminus
Код: Выделить всё
#!/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

Re: Архивирование всех папок в директории
Добавлено: 2010-09-13 13:47:49
AlkoGekS
Принцип скрипта понял, но у меня bash!
Re: Архивирование всех папок в директории
Добавлено: 2010-09-13 13:49:01
terminus
/bin/sh есть в любой системе.
Re: Архивирование всех папок в директории
Добавлено: 2010-09-13 13:52:40
AlkoGekS
Код: Выделить всё
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 #
Re: Архивирование всех папок в директории
Добавлено: 2010-09-13 13:57:55
rmn
Re: Архивирование всех папок в директории
Добавлено: 2010-09-13 14:09:48
QuAzI
DATE=val и LIST=val без пробелов, иначе оно считает что это команда с двумя параметрами.
Если у вас архив ложится на тот же винт, на котором исходник, почитайте про снапшоты - быстрее, удобнее и меньше нагрузка на винты. Если нет, rsync на другой винт/сервер и там снапшот

Re: Архивирование всех папок в директории
Добавлено: 2010-09-13 14:30:23
AlkoGekS
Спасибо большое всем!
Получился вот такой скрипт (именно то, что я и хотел):
Код: Выделить всё
#!/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
Re: Архивирование всех папок в директории
Добавлено: 2010-09-13 14:44:33
terminus
Linux что ли? Тогда да, date без -j (это у БСДшников -j).
а с пробелами я точно прошляпил... без пробелов присвоение переменным надо было делать

Re: Архивирование всех папок в директории
Добавлено: 2010-09-13 15:41:56
AlkoGekS
Многоплатформенный скрипт мне был нужен просто

Re: Архивирование всех папок в директории
Добавлено: 2010-09-13 15:49:04
schizoid
если много платформенный, то лучше на sh писать...
Re: Архивирование всех папок в директории
Добавлено: 2010-10-11 8:25:43
DanGer
Насколько я знаю, tar с ключом "-z" создает архив gz. Если так, можно избежать второй строки:
Код: Выделить всё
/bin/gzip -9 /Backup/Backup_$DATE-$ELEMENT.tar
Re: Архивирование всех папок в директории
Добавлено: 2010-10-19 21:18:07
paix
schizoid писал(а):если много платформенный, то лучше на sh писать...
сорри, но если многоплатформенный, то лучше на shell НЕ писать.
python/perl/php/scala...
Re: Архивирование всех папок в директории
Добавлено: 2010-10-20 11:54:21
masterito
Все зависит от сложности скрипта - в данном случае sh то что нужно.
Re: Архивирование всех папок в директории
Добавлено: 2010-10-20 19:31:14
Alex Keda
paix писал(а):schizoid писал(а):если много платформенный, то лучше на sh писать...
сорри, но если многоплатформенный, то лучше на shell НЕ писать.
python/perl/php/scala...
ни одного из перечисленных языков нет на IBM AIX что на работе стоит. (если тока перл есть - не уверен, надо глянуть)
но там есть sh - как и на любой UNIX платформе
Re: Архивирование всех папок в директории
Добавлено: 2010-10-20 21:54:57
paix
Alex Keda писал(а):paix писал(а):
сорри, но если многоплатформенный, то лучше на shell НЕ писать.
python/perl/php/scala...
ни одного из перечисленных языков нет на IBM AIX что на работе стоит.
но там есть sh - как и на любой UNIX платформе
только сочувствую...

Re: Архивирование всех папок в директории
Добавлено: 2010-10-20 22:37:35
Alex Keda
неа. мне с головой хватает шелла.
в паре скриптов юзаю перл - в основном там где надо много считать дробные числа и делать достаточно сложную математику и логику.
а посочувствовать я могу тока вам - зоопарк языков содержать/юзать - у вас масса свободного времени которое вы не знаете куда деть, видимо.
Re: Архивирование всех папок в директории
Добавлено: 2010-10-20 23:49:01
paix
О да,
переносимость (о чем шла речь) shell скриптов уровня echo "hello world" просто божественна. Работают на любом unix

чуть сложнее - и балалайка.
У меня зоопарка нет. Для более сложной логики - использую python.
Re: Архивирование всех папок в директории
Добавлено: 2010-10-21 5:38:23
DanGer
А что может быть проще и мультиплатформеннее, чем sh? Мое мнение: если есть возможность - лучше писать на sh, независимо есть ли на управляемых системах python etc.
Re: Архивирование всех папок в директории
Добавлено: 2010-10-21 12:18:08
paix
DanGer писал(а):А что может быть проще и мультиплатформеннее, чем sh? Мое мнение: если есть возможность - лучше писать на sh, независимо есть ли на управляемых системах python etc.
Какая в задницу мультиплатформенность скриптов на sh ?
если опции шеловских команд да и сами команды отличаются в разных юниксах.
RTFM. Например, Эрик Реймонд, Искусство программирования для Unix.
Re: Архивирование всех папок в директории
Добавлено: 2010-10-21 12:45:18
DanGer
Я, конечно могу ошибаться, но sh всега был и остается sh (опустим тот факт, что во FreeBSD это линк на tcsh). И я не заметил каких-то отличий в работе указанного интерпретатора ни в FreeBSD, ни в AIX и в двух-трех линукс - всегда все работало как надо. Хотя, линуксоиды народ неординарный, может у них и sh какой-то неправильный (не UNIX, все-таки).
Может Вы путаете с синтаксисом отдельных утилит в системах? Ну да, у них нет строгого предписания иметь один набор опций и функций.
Re: Архивирование всех папок в директории
Добавлено: 2010-10-21 12:49:01
FreeBSP
во фре 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
в первой колонке иноды
Re: Архивирование всех папок в директории
Добавлено: 2010-10-21 13:25:21
paix
DanGer писал(а):
Может Вы путаете с синтаксисом отдельных утилит в системах? Ну да, у них нет строгого предписания иметь один набор опций и функций.
Я ничего не путаю и выражаюсь конкретно.
Вам кстати часто приходится писать на sh/csh без использования "отдельных утилит"? таких как find, sort, awk, sed, tar и т.п. ?
именно поэтому shell скрипты имеют очень низкую переносимость, потому что в чистом виде скрипты на sh/csh - это скрипты уровня "hello world".
open your mind! open your eyes!
Re: Архивирование всех папок в директории
Добавлено: 2010-10-21 19:58:05
Alex Keda
2 paix
вы бредите

посомтрите на стартовые скрипты FreeBSD
почти чистый sh c расчётом что утилит максимум что будет /bin и /sbin
========
что касается хело ворлд - 99% скриптов администратора - это именно хело ворлд.
и на каждой новой системе изобретать новый хело ворлд на новом языке - не, это не для меня.
да, и 90% основных опций у основных команд, типа awk/grep/find/etc - они одинаковы.
если вы используете какие-то нестандартные извраты - это ваша проблема.