Идентичные, как мне казалось команды дают абсолютно разный результат.
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 декабря в 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
Попробуйте так:
SOURCE="/media/temp/Источник 1»
rsync -av «$SOURCE» /media/temp/dest/cur
Так кавычки не передаются
следовательно воспринимается как 2 пути:
Правильно, кавычки и не должны в операторе присваивания передаваться, т.к. в переменной нам нужен путь, а не строка символов, которая начинается и заканчивается кавычками. Внутри команды sync для этого и заключаем переменную в кавычки.
Работает. Спасибо.
А как передать несколько путей?
Кто мешает написать скрипт, который последовательно будет скидывать?! В мане написано, что можно несколько источников использовать, но только с удаленных хостов (хотя никто не мешает указать localhost). Но при этом запрашивается пароль пользователя, от которого работаешь — на мой взгляд не удобно.
несколько источников работает локально.
Но как их подставить через переменную?
Так неработает.
Это все Вы городите ради бэкапа? Не проще ли воспользоваться 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-ов. Очень удобно.
Как говорится, найди 3 отличия.
LASTDIR=`cat $DEST/lastbackup` — правильно. В этом файле записывается название директории последнего бэкапа.
«$LASTDIR» и «$DEST/$CURDIR» в кавычки заключать не надо, т.к в их названиях не используются пробелы.
И, вообще, если не использовать пробелы в названиях источников - все работает замечательно.
В Вашем случае не используются пробелы, а в каком-то используются — надо сразу универсальные решения делать
Вот это взято из man rsync: «--link-dest=DIR hardlink to files in DIR when unchanged» — как я понимаю, все-таки должна быть директория.
Это и есть директория, путь к которой записан в фаил $DEST/lastbackup.
А проблемма со списком источников, содержащих пробелы, так и не решена.
Как это не решена? Я же написал
Действительно работает. Не заметил сразу.
Вот окончательный вариант
Спасибо огромное за помощь.