bash скрипт бекапа (помогите пропустить папку)
требуется немного помощи в написании скрипта. что имеем:
source=/var/samba/share/
for i in $( ls $source); do
mount /mnt/$i
zip -r $source$i-$dt_y.zip $source$i
mv $source$i-$dt_y.zip /mnt/$i/$dt_y.zip
umount /mnt/$i
done
exit 0
имена директорий в шаре и маунте совпадают, по этому могу спокойно работать с переменной, но, есть у меня в шаре папка distr, её соответственно бэкапить не нужно, никак не могу заставить скрипт её пропускать.
почитал разные примеры, попробовал уже и
if [$i!=distr]
then
маунтим, архивируем, переносим, отмаунтиваем
fi
и
while [$i!=distr]
маунтим, архивируем, переносим, отмаунтиваем
done
фиг, всё время жалуется - [admin!=distr]: команда не найдена
подскажите как реализовать, или хотя бы каким не тем местом я примерчики читаю? :(
- Для комментирования войдите или зарегистрируйтесь
zip критичен?
zip критичен? Если нет, то tar -cjf /path/to/backup.tar.bz2 /$source -X exclude
Где exclude - текстовый файл со списком директорий, не подлежащих архивации. Более подробная информация в man tar.
Можно
Можно попробовать название папки сначала в переменную запихнуть. Хотя я поддерживаю идею с tar.
да,зип критичен
да,зип критичен
source="/var/samba/share"fai
source="/var/samba/share"
failed() {
echo "${1} Failed!"
exit 1
}
ok() {
echo "${1} OK"
}
for i in `ls "${source}" | grep -vf /etc/backup/excludes.list`; do
mount "/mnt/${i}" && ok mount || failed mount
zip -r "${source}_${dt_y}.zip" "${source}/${i}" && ok zip || failed zip
mkdir -p "/mnt/${i}"
mv "${source}_${dt_y}.zip" "/mnt/${i}/${dt_y}.zip" && ok mv || failed mv
umount "/mnt/${i}" && ok umount || failed umount
done
exit 0
Примерно так
В excludes.list пиши список того, что исключаем
Что такое ${dt_y} я не понял, может быть дата?
Надо доработать обработку ошибок.
${dt_y} - да, дата,
${dt_y} - да, дата, думаю это не критично в данном случае, по этому и не стал писать
dt_y=`date +%d-%m-%Y -d '1 day ago'`
а что с обработкой ошибок?
Можно улучшить
Можно улучшить те процедурки которые я вставил чтобы они писали поподробнее в чем проблема и, может быть, что-то делали по этому поводу, хотя того что есть достаточно.
Олсо: не используйте "-" в именах файлов. Используйте "_". Меньше неудобств получите.
В скриптах всегда пишите переменные в "{ }" и строки тоже в " ". Меньше шансов словить непонятный глюк.
..................................................................
Unix - дружественная система, но своих друзей она хорошо выбирает.
ок, спасибо да
ок, спасибо
да собственно _ и не пахали, пока переменные были не в {}, по этому тире и использовал
спасибо!
Измени одну
Измени одну строку
на
____________
Экономь электроэнергию! Выключи NumLock!
Или так: for i in `ls
Или так:
for i in `ls $source|sed -e "s/ distr / /g"`; do
После [ и перед ]
После [ и перед ] - обязательно пробелы! Хотя в баш test и [ встроенные, это не отменяет необходимости ставить пробелы
Моя модификация
Моя модификация
#!/bin/sh
DATE=`date +%d.%m.%Y\_%T`
SOURCE="/var/samba/"
DIR="/usr/local/script/backup"
EXCLUDES_NAME="$DIR/excludes.name"
EXCLUDES_LIST="$DIR/excludes.list"
BACKUP_DIR="/backup/1C/buh/archives"
failed() {
echo "${1} Failed!"
exit 1
}
ok() {
echo "${1} OK"
}
echo "================= $DATE ===================="
for i in `ls "$SOURCE" | grep -wvf $EXCLUDES_LIST`; do
#mount "/mnt/${i}" && ok mount || failed mount
zip -9 -r "${SOURCE}_${DATE}.zip" "${SOURCE}/${i}" -x `cat $EXCLUDES_NAME` && ok zip || failed zip
mkdir -p "${BACKUP_DIR}/${i}"
chmod 0750 "${BACKUP_DIR}/${i}"
mv "${SOURCE}_${DATE}.zip" "${BACKUP_DIR}/${i}/${DATE}.zip" && ok mv || failed mv
chmod 0644 "${BACKUP_DIR}/${i}/${DATE}.zip" && ok chmod || failed chmod
#umount "/mnt/${i}" && ok umount || failed umount
done
exit 0