Идентичные, как мне казалось команды дают абсолютно разный результат.
root@asr-desktop:/# rsync -a -v «/media/temp/Источник 1» /media/temp/dest/cur
sending incremental file list
sent 295 bytes received 14 bytes 618.00 bytes/sec
total size is 636477 speedup is 2059.80
А при подстановке переменной не работает.
root@asr-desktop:/# SOURCE=«\»/media/temp/Источник 1\"»;echo $SOURCE;rsync -a -v $SOURCE /media/temp/dest/cur
/media/temp/Источник 1»
sending incremental file list
rsync: change_dir «/»/media/temp» failed: No such file or directory (2)
rsync: link_stat «/1»» failed: No such file or directory (2)
sent 12 bytes received 12 bytes 48.00 bytes/sec
total size is 0 speedup is 0.00
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1060) [sender=3.0.7]
Подскажите кнонибудь что я делаю не так?
Последние комментарии
-
OlegL, 17 декабря 2023 года в 15:00 →
Перекличка
21
-
REDkiy, 8 июня 2023 года в 9:09 →
Как «замокать» файл для юниттеста в Python?
2
-
fhunter, 29 ноября 2022 года в 2:09 →
Проблема с NO_PUBKEY: как получить GPG-ключ и добавить его в базу apt?
6
-
Иванн, 9 апреля 2022 года в 8:31 →
Ассоциация РАСПО провела первое учредительное собрание
1
-
Kiri11.ADV1, 7 марта 2021 года в 12:01 →
Логи catalina.out в TomCat 9 в формате JSON
1
DevOps as a Service from Palark

Попробуйте так:
SOURCE="/media/temp/Источник 1»
rsync -av «$SOURCE» /media/temp/dest/cur
Так кавычки не передаются
следовательно воспринимается как 2 пути:
Правильно, кавычки и не должны в операторе присваивания передаваться, т.к. в переменной нам нужен путь, а не строка символов, которая начинается и заканчивается кавычками. Внутри команды sync для этого и заключаем переменную в кавычки.
Работает. Спасибо.
А как передать несколько путей?
Кто мешает написать скрипт, который последовательно будет скидывать?! В мане написано, что можно несколько источников использовать, но только с удаленных хостов (хотя никто не мешает указать localhost). Но при этом запрашивается пароль пользователя, от которого работаешь — на мой взгляд не удобно.
несколько источников работает локально.
Но как их подставить через переменную?
#Папка назначения DEST=/home/asr/temp/dest #Папки источники SOURCE[0]="/home/asr/temp/Источник 1" SOURCE[1]="/home/asr/temp/source" #------------------------------------------------------------------------- LASTDIR=`cat $DEST/lastbackup` CURDIR=`date +%F_%H_%M` for i in ${SOURCE[@]}; do echo $i echo "-----------" rsync -a -v --link-dest=../$LASTDIR "$i" $DEST/$CURDIR/ echo "-------------------------" doneТак неработает.
Это все Вы городите ради бэкапа? Не проще ли воспользоваться tar’ом?!
SRC1=/home/asr/temp/Источник 1
SRC2=/home/asr/temp/source
CURDIR=`date +%F_%H-%M`
mkdir -p /home/asr/temp/dest/«$CURDIR»
tar -cpvf ~/«$CURDIR»/test.tar «$SRC1» «$SRC2»
Если источников много, то можно поместить их перечень в файл.
А tar умеет --link-dest ?
А также хотелось узнать почему не работает, чтобы в следующий раз не делать такихже ошибок.
А зачем Вам нужны hardlink’и — Вы же все равно каждый раз кидаете в новые папки?
из новой папки, если фаил не изменился, делается hardlink’и на предидущую. Место не естся, получается чтото типа snapshot-ов. Очень удобно.
#Папка назначения DEST=[b]/[/b]home[b]/[/b]asr[b]/[/b]temp[b]/[/b]dest #Папки источники SOURCE[b][[/b]0[b]][/b]="/home/asr/temp/Источник 1" SOURCE[b][[/b]1[b]][/b]="/home/asr/temp/source" #------------------------------------------------------------------------- LASTDIR=`[b]cat[/b] $DEST[b]/[/b]lastbackup` CURDIR=`[b]date[/b] +[b]%[/b]F_[b]%[/b]H_[b]%[/b]M` [b]for[/b] i [b]in[/b] "$[b]{[/b]SOURCE[b][[/b][b]@[/b][b]][/b][b]}"[/b]; [b]do[/b] [b]echo[/b] $i [b]echo[/b] "-----------" rsync -a -v --link-dest="$LASTDIR" "$i" "$DEST[b]/[/b]$CURDIR[b]"[/b] [b]echo[/b] "-------------------------" [b]done[/b]Как говорится, найди 3 отличия.
LASTDIR=`cat $DEST/lastbackup` — правильно. В этом файле записывается название директории последнего бэкапа.
«$LASTDIR» и «$DEST/$CURDIR» в кавычки заключать не надо, т.к в их названиях не используются пробелы.
И, вообще, если не использовать пробелы в названиях источников - все работает замечательно.
В Вашем случае не используются пробелы, а в каком-то используются — надо сразу универсальные решения делать
Вот это взято из man rsync: «--link-dest=DIR hardlink to files in DIR when unchanged» — как я понимаю, все-таки должна быть директория.
Это и есть директория, путь к которой записан в фаил $DEST/lastbackup.
А проблемма со списком источников, содержащих пробелы, так и не решена.
Как это не решена? Я же написал
[b]for[/b] i [b]in[/b] "$[b]{[/b]SOURCE[b][[/b][b]@[/b][b]][/b][b]}"[/b]; [b]doВсе прекрасно работает[/b]
Действительно работает. Не заметил сразу.
Вот окончательный вариант
#!/bin/bash #backup.sh #Скрипт архивирования в виде снапшотов с использованием жестких ссылок #----------------------------------------------------------------------- #Папка назначения DEST=/home/asr/temp/dest #Папки источники SOURCE[0]="/home/asr/temp/Источник 1" SOURCE[1]="/home/asr/temp/source" #------------------------------------------------------------------------- LASTDIR=`cat $DEST/lastbackup` CURDIR=`date +%F_%H_%M` for i in "${SOURCE[@]}";do rsync -a -v --ignore-errors --no-whole-file --link-dest=../$LASTDIR "$i" $DEST/$CURDIR/ >> $DEST/backuplog.log echo "#------------------------------------------------------------------------" >> $DEST/backuplog.log done echo $CURDIR >$DEST/lastbackupСпасибо огромное за помощь.