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 - дружественная система, но своих друзей она хорошо выбирает.

ок, спасибо да

ок, спасибо
да собственно _ и не пахали, пока переменные были не в {}, по этому тире и использовал
спасибо!

Измени одну

Измени одну строку

Цитата:
for i in $( ls $source); do

на

for i in $( ls $source |grep -v distr); do

____________
Экономь электроэнергию! Выключи 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

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".