nome do diretório com espaço e bash

6

Gostaria de excluir os diretórios "temp" e "Ubuntu One /" do backup. Qual é o escape correto do espaço ????

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

Obrigado antecipadamente!

  • Chris

Editar / PS:

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

e

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

não funcionou. Eu realmente aprecio qualquer conselho.

Este é o script: link

    
por chris 13.06.2011 / 17:10

3 respostas

7

Se você estiver criando opções em uma string, terá problemas ao tentar usá-la ( rsync "$RSYNCCONF" ). Melhor usar uma matriz - quando você desreferenciar a matriz, cada elemento será manipulado adequadamente pelo shell:

RSYNCCONF=( --delete '--exclude=.*' --exclude=temp/ '--exclude="Ubuntu One/"' )
rsync "${RSYNCCONF[@]}"
    
por glenn jackman 13.06.2011 / 18:06
1

Coloque entre aspas simples:

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

ou coloque uma barra invertida antes do espaço:

RSYNCCONF="--delete --exclude=.* --exclude=temp/ --exclude=Ubuntu\ One/ "
    
por Rajish 13.06.2011 / 17:17
1

Aqui está uma maneira de fazer isso.

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

Note que o acima usa a sintaxe bash, então não funcionará com sh. Além disso, as citações são vitais, não as omitir.

Veja o link para uma explicação de por que colocar mais de um argumento em uma variável de string está errado.

EDIT: A partir da pasta de colagem em seus comentários, isso parece ser o que você quer.

#!/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
    
por geirha 13.06.2011 / 22:34