Я хотел бы исключить каталоги "временная" и "Ubuntu Одна /" от резервного копирования. Из чего корректное выходит пространства????
RSYNCCONF="--delete --exclude=.* --exclude=temp/"
Заранее спасибо!
Редактирование/PS:
excludes=( ".*" temp/ "Ubuntu One/" )' 'RSYNCCONF="${excludes[@]/#/--exclude=}"
и
$RSYNC -e "$S" -avR $FROMSSH:$SOURCE ${RSYNCCONF[@]} $TARGET$TODAY $INC >> $LOG 2>&1
не работал. Я был бы очень признателен за любой совет.
Это - сценарий: http://wiki.ubuntuusers.de/_attachment?target=Skripte%2FBackup_mit_RSYNC%2Fbackup.sh
При создании опций в строке Вы столкнетесь с проблемами, когда Вы попытаетесь использовать ее (rsync "$RSYNCCONF"
). Лучше для использования массива - при разыменовании массива каждый элемент будет правильно обработан оболочкой:
RSYNCCONF=( --delete '--exclude=.*' --exclude=temp/ '--exclude="Ubuntu One/"' )
rsync "${RSYNCCONF[@]}"
Поместите его в одинарные кавычки:
RSYNCCONF="--delete --exclude=.* --exclude=temp/ --exclude='Ubuntu One/' "
или помещенный обратная косая черта перед пространством:
RSYNCCONF="--delete --exclude=.* --exclude=temp/ --exclude=Ubuntu\\ One/ "
Вот один способ сделать его.
excludes=( ".*" temp/ "Ubuntu One/" )
rsync --delete "${excludes[@]/#/--exclude=}"
Обратите внимание, что вышеупомянутое использование колотит синтаксис, таким образом, он не будет работать с sh. Кроме того, кавычки жизненно важны, не опускайте их.
См. http://mywiki.wooledge.org/WordSplitting для объяснения того, почему помещение больше чем одного аргумента в строковую переменную является неправильным.
Править: От pastebin в Ваших комментариях это, кажется, то, что Вы хотите.
#!/bin/bash
source=/home/chris/
backupdir=/media/alteplatte/backups
backupname=$(date +%Y-%m-%d)-cd
excludes=( ".*" temp/ "Ubuntu One/" )
linkdest=$backupdir/link
if [[ -d $backupdir ]]; then
rsync -av ${linkdest:+"--link-dest=$linkdest"} --delete \
"${excludes[@]/#/--exclude=}" "$source" "$backupdir/$backupname"
else
echo "$0: $backupdir: Not a directory, make sure the filesystem is mounted" >&2
exit 1
fi