web-dev-qa-db-fra.com

nom du répertoire avec espace et bash

Je voudrais exclure les répertoires "temp" et "Ubuntu One /" de la sauvegarde. Quelle est la fuite correcte de l'espace ????

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

Merci d'avance!

  • Chris

Modifier/PS:

excludes=( ".*" temp/ "Ubuntu One/" )' 'RSYNCCONF="${excludes[@]/#/--exclude=}" 

et

$RSYNC -e "$S" -avR $FROMSSH:$SOURCE ${RSYNCCONF[@]} $TARGET$TODAY $INC >> $LOG 2>&1 

n'a pas fonctionné. J'apprécierais vraiment tout conseil.

Voici le script: http://wiki.ubuntuusers.de/_attachment?target=Skripte%2FBackup_mit_RSYNC%2Fbackup.sh

6
chris

Si vous créez des options dans une chaîne, vous rencontrerez des problèmes lorsque vous essayez de l'utiliser (rsync "$RSYNCCONF"). Mieux vaut utiliser un tableau - lorsque vous déréférencer le tableau, chaque élément sera correctement géré par le Shell:

RSYNCCONF=( --delete '--exclude=.*' --exclude=temp/ '--exclude="Ubuntu One/"' )
rsync "${RSYNCCONF[@]}"
7
glenn jackman

Mettez-le entre guillemets simples:

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

ou mettez une barre oblique inverse avant l'espace:

RSYNCCONF="--delete --exclude=.* --exclude=temp/ --exclude=Ubuntu\\ One/ "
1
Rajish

Voici une façon de procéder.

excludes=( ".*" temp/ "Ubuntu One/" )
rsync --delete "${excludes[@]/#/--exclude=}"

Notez que ce qui précède utilise la syntaxe bash, donc cela ne fonctionnera pas avec sh. De plus, les citations sont vitales, ne les omettez pas.

Voir http://mywiki.wooledge.org/WordSplitting pour une explication des raisons pour lesquelles mettre plus d'un argument dans une variable de chaîne est incorrect.

EDIT: De la Pastebin dans vos commentaires, cela semble être ce que vous voulez.

#!/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
geirha