имя каталога с пространством и ударом

Я хотел бы исключить каталоги "временная" и "Ubuntu Одна /" от резервного копирования. Из чего корректное выходит пространства????

RSYNCCONF="--delete --exclude=.* --exclude=temp/"

Заранее спасибо!

  • Chris

Редактирование/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

6
задан 14 June 2011 в 16:00

3 ответа

При создании опций в строке Вы столкнетесь с проблемами, когда Вы попытаетесь использовать ее (rsync "$RSYNCCONF"). Лучше для использования массива - при разыменовании массива каждый элемент будет правильно обработан оболочкой:

RSYNCCONF=( --delete '--exclude=.*' --exclude=temp/ '--exclude="Ubuntu One/"' )
rsync "${RSYNCCONF[@]}"
7
ответ дан 23 November 2019 в 07:36

Поместите его в одинарные кавычки:

RSYNCCONF="--delete --exclude=.* --exclude=temp/ --exclude='Ubuntu One/' "

или помещенный обратная косая черта перед пространством:

RSYNCCONF="--delete --exclude=.* --exclude=temp/ --exclude=Ubuntu\\ One/ "
1
ответ дан 23 November 2019 в 07:36

Вот один способ сделать его.

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
1
ответ дан 23 November 2019 в 07:36

Другие вопросы по тегам:

Похожие вопросы: