Я хотел бы исключить из резервной копии каталоги «temp» и «Ubuntu One /».
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
Вот один из способов сделать это.
excludes=( ".*" temp/ "Ubuntu One/" )
rsync --delete "${excludes[@]/#/--exclude=}"
Обратите внимание, что в приведенном выше примере используется синтаксис bash, поэтому он не будет работать с sh. Кроме того, цитаты являются жизненно важными, не опускайте их.
См. Http://mywiki.wooledge.org/WordSplitting для объяснения причин неправильного ввода нескольких аргументов в строковую переменную.
РЕДАКТИРОВАТЬ: Из пастебинов в ваших комментариях это похоже на то, что вы хотите.
#!/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
Если вы создаете параметры в строке, вы столкнетесь с проблемами при попытке использовать ее (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 / "
Если вы создаете параметры в строке, вы столкнетесь с проблемами при попытке использовать ее ( rsync "$ RSYNCCONF"
). Лучше использовать массив - при разыменовании массива каждый элемент будет правильно обработан оболочкой:
RSYNCCONF = (--delete '--exclude =. *' --Exclude = temp / '--exclude = "Ubuntu One /"') rsync "$ {RSYNCCONF [@]}"
Вот один из способов сделать это.
исключает = (". *" temp / "Ubuntu One /") rsync --delete "$ {исключает [@] / # / - -exclude =} "
Обратите внимание, что в приведенном выше примере используется синтаксис bash, поэтому он не будет работать с sh. Кроме того, цитаты являются жизненно важными, не опускайте их.
См. [D0] http://mywiki.wooledge.org/WordSplitting для объяснения того, почему положить более одного аргумента в Строка переменной неверна.
РЕДАКТИРОВАТЬ: Из пастебина в ваших комментариях это похоже на то, что вы хотите.
#! / bin / bash source = / home / chris / backupdir = / media / alteplatte / backups backupname = $ (date +% Y-% m-% d) -cd исключает = (". *" temp / "Ubuntu One /") linkdest = $ backupdir / link, если [ [-d $ backupdir]]; затем rsync -av $ {linkdest: + "- link-dest = $ linkdest"} --delete \ "$ {исключает [@] / # / - exclude =}" "$ source" "$ backupdir / $ backupname «else echo» $ 0: $ backupdir: не каталог, убедитесь, что файловая система смонтирована «& gt; & amp; 2 exit 1 fi
Поместите его в одинарные кавычки:
RSYNCCONF="--delete --exclude=.* --exclude=temp/ --exclude='Ubuntu One/' "
или поместите обратную косую черту перед пробелом:
RSYNCCONF="--delete --exclude=.* --exclude=temp/ --exclude=Ubuntu\\ One/ "
Если вы создаете параметры в строке, вы столкнетесь с проблемами при попытке использовать ее ( 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 / "
Вот один из способов сделать это.
исключает = (". *" temp / "Ubuntu One /") rsync --delete "$ {исключает [@] / # / - -exclude =} "
Обратите внимание, что в приведенном выше примере используется синтаксис bash, поэтому он не будет работать с sh. Кроме того, цитаты являются жизненно важными, не опускайте их.
См. [D0] http://mywiki.wooledge.org/WordSplitting для объяснения того, почему положить более одного аргумента в Строка переменной неверна.
РЕДАКТИРОВАТЬ: Из пастебина в ваших комментариях это похоже на то, что вы хотите.
#! / bin / bash source = / home / chris / backupdir = / media / alteplatte / backups backupname = $ (date +% Y-% m-% d) -cd исключает = (". *" temp / "Ubuntu One /") linkdest = $ backupdir / link, если [ [-d $ backupdir]]; затем rsync -av $ {linkdest: + "- link-dest = $ linkdest"} --delete \ "$ {исключает [@] / # / - exclude =}" "$ source" "$ backupdir / $ backupname «else echo» $ 0: $ backupdir: не каталог, убедитесь, что файловая система смонтирована «& gt; & amp; 2 exit 1 fi
Вот один из способов сделать это.
исключает = (". *" temp / "Ubuntu One /") rsync --delete "$ {исключает [@] / # / - -exclude =} "
Обратите внимание, что в приведенном выше примере используется синтаксис bash, поэтому он не будет работать с sh. Кроме того, цитаты являются жизненно важными, не опускайте их.
См. [D0] http://mywiki.wooledge.org/WordSplitting для объяснения того, почему положить более одного аргумента в Строка переменной неверна.
РЕДАКТИРОВАТЬ: Из пастебина в ваших комментариях это похоже на то, что вы хотите.
#! / bin / bash source = / home / chris / backupdir = / media / alteplatte / backups backupname = $ (date +% Y-% m-% d) -cd исключает = (". *" temp / "Ubuntu One /") linkdest = $ backupdir / link, если [ [-d $ backupdir]]; затем rsync -av $ {linkdest: + "- link-dest = $ linkdest"} --delete \ "$ {исключает [@] / # / - exclude =}" "$ source" "$ backupdir / $ backupname «else echo» $ 0: $ backupdir: не каталог, убедитесь, что файловая система смонтирована «& gt; & amp; 2 exit 1 fi
Если вы создаете параметры в строке, вы столкнетесь с проблемами при попытке использовать ее (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/ "
Если вы создаете параметры в строке, вы столкнетесь с проблемами при попытке использовать ее (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/ "
Вот один из способов сделать это.
исключает = (". *" temp / "Ubuntu One /") rsync --delete "$ {исключает [@] / # / - -exclude =} "
Обратите внимание, что в приведенном выше примере используется синтаксис bash, поэтому он не будет работать с sh. Кроме того, цитаты являются жизненно важными, не опускайте их.
См. [D0] http://mywiki.wooledge.org/WordSplitting для объяснения того, почему положить более одного аргумента в Строка переменной неверна.
РЕДАКТИРОВАТЬ: Из пастебина в ваших комментариях это похоже на то, что вы хотите.
#! / bin / bash source = / home / chris / backupdir = / media / alteplatte / backups backupname = $ (date +% Y-% m-% d) -cd исключает = (". *" temp / "Ubuntu One /") linkdest = $ backupdir / link, если [ [-d $ backupdir]]; затем rsync -av $ {linkdest: + "- link-dest = $ linkdest"} --delete \ "$ {исключает [@] / # / - exclude =}" "$ source" "$ backupdir / $ backupname «else echo» $ 0: $ backupdir: не каталог, убедитесь, что файловая система смонтирована «& gt; & amp; 2 exit 1 fi
Если вы создаете параметры в строке, вы столкнетесь с проблемами при попытке использовать ее ( 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 / "
Вот один из способов сделать это.
исключает = (". *" temp / "Ubuntu One /") rsync --delete "$ {исключает [@] / # / - -exclude =} "
Обратите внимание, что в приведенном выше примере используется синтаксис bash, поэтому он не будет работать с sh. Кроме того, цитаты являются жизненно важными, не опускайте их.
См. [D0] http://mywiki.wooledge.org/WordSplitting для объяснения того, почему положить более одного аргумента в Строка переменной неверна.
РЕДАКТИРОВАТЬ: Из пастебина в ваших комментариях это похоже на то, что вы хотите.
#! / bin / bash source = / home / chris / backupdir = / media / alteplatte / backups backupname = $ (date +% Y-% m-% d) -cd исключает = (". *" temp / "Ubuntu One /") linkdest = $ backupdir / link, если [ [-d $ backupdir]]; затем rsync -av $ {linkdest: + "- link-dest = $ linkdest"} --delete \ "$ {исключает [@] / # / - exclude =}" "$ source" "$ backupdir / $ backupname «else echo» $ 0: $ backupdir: не каталог, убедитесь, что файловая система смонтирована «& gt; & amp; 2 exit 1 fi
Поместите его в одинарные кавычки:
RSYNCCONF = "- delete --exclude =. * --exclude = temp / --exclude = 'Ubuntu One /'"
или поставить обратную косую черту перед пробелом:
RSYNCCONF = "- delete --exclude =. * --exclude = temp / --exclude = Ubuntu \ \ One / "
Вот один из способов сделать это.
исключает = (". *" temp / "Ubuntu One /") rsync --delete "$ {исключает [@] / # / - -exclude =} "
Обратите внимание, что в приведенном выше примере используется синтаксис bash, поэтому он не будет работать с sh. Кроме того, цитаты являются жизненно важными, не опускайте их.
См. [D0] http://mywiki.wooledge.org/WordSplitting для объяснения того, почему положить более одного аргумента в Строка переменной неверна.
РЕДАКТИРОВАТЬ: Из пастебина в ваших комментариях это похоже на то, что вы хотите.
#! / bin / bash source = / home / chris / backupdir = / media / alteplatte / backups backupname = $ (date +% Y-% m-% d) -cd исключает = (". *" temp / "Ubuntu One /") linkdest = $ backupdir / link, если [ [-d $ backupdir]]; затем rsync -av $ {linkdest: + "- link-dest = $ linkdest"} --delete \ "$ {исключает [@] / # / - exclude =}" "$ source" "$ backupdir / $ backupname «else echo» $ 0: $ backupdir: не каталог, убедитесь, что файловая система смонтирована «& gt; & amp; 2 exit 1 fi
Если вы создаете параметры в строке, вы столкнетесь с проблемами при попытке использовать ее ( 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 / "
Если вы создаете параметры в строке, вы столкнетесь с проблемами при попытке использовать ее ( rsync "$ RSYNCCONF"
). Лучше использовать массив - при разыменовании массива каждый элемент будет правильно обработан оболочкой:
RSYNCCONF = (--delete '--exclude =. *' --Exclude = temp / '--exclude = "Ubuntu One /"') rsync "$ {RSYNCCONF [@]}"
$ RSYNC -e "$ S" -avR $ FROMSSH: $ SOURCE & quot; $ {RSYNCCONF [@]} & quot; $ TARGET $ TODAY $ INC & gt; & gt; & gt; $ LOG 2 & amp; 1
Просто замените $ RSYNCCONF
на массив?
– chris
14 June 2011 в 04:15
Вот один из способов сделать это.
исключает = (". *" temp / "Ubuntu One /") rsync --delete "$ {исключает [@] / # / - -exclude =} "
Обратите внимание, что в приведенном выше примере используется синтаксис bash, поэтому он не будет работать с sh. Кроме того, цитаты являются жизненно важными, не опускайте их.
См. [D0] http://mywiki.wooledge.org/WordSplitting для объяснения того, почему положить более одного аргумента в Строка переменной неверна.
РЕДАКТИРОВАТЬ: Из пастебина в ваших комментариях это похоже на то, что вы хотите.
#! / bin / bash source = / home / chris / backupdir = / media / alteplatte / backups backupname = $ (date +% Y-% m-% d) -cd исключает = (". *" temp / "Ubuntu One /") linkdest = $ backupdir / link, если [ [-d $ backupdir]]; затем rsync -av $ {linkdest: + "- link-dest = $ linkdest"} --delete \ "$ {исключает [@] / # / - exclude =}" "$ source" "$ backupdir / $ backupname «else echo» $ 0: $ backupdir: не каталог, убедитесь, что файловая система смонтирована «& gt; & amp; 2 exit 1 fi