rsync копирует файлы с рабочего каталога в дополнение к требуемым

Следующее является надрезом вывода от bash -vx на моем резервном сценарии

\+ rsync '' -avushi --stats --progress --log-file=/home/bigbird/temp/rlog/rlog1.txt /media/dataspace/data/webcasts/ /media/work/data/webcasts

отправка возрастающего списка файлов

Я делал rsyncs как это навсегда и я просто видел эту проблему в прошлом месяце или два. Этот работает на Kubuntu Oneiric, но я думаю, что, возможно, видел его на Kubuntu Lucid также.

Скрипт запускается от /home/bigbird/bin

Это работает отлично за исключением того, что это дополнительно передает все файлы от моего текущего каталога до места назначения. У меня также есть секунда rsync позже в сценарии, который делает то же самое к другому каталогу.

Я просто выполнил его снова из другого каталога, и это скопировало все те файлы вместо этого.

Я не вижу a "." в источнике где угодно и т.д.

Я сделал a set | less

Посмотревший все мой ~/bin файлы

Посмотревший все мои псевдонимы

У меня нет подсказки относительно того, что вызвало бы это.

Где я ищу проблему?

1
задан 14 March 2012 в 01:34

2 ответа

Первоначальный код был

DRYRUN="-n"
DRYRUN=""
...

rsync "${DRYRUN}" -avushi --stats --progress --log-file="${LOGFILE}"
 /media/dataspace/data/webcasts/ "${MOUNT}${DESTDIR}"

Рабочий код:

DRYRUN=1      ## for testing rsync without any file transfers
DRYRUN=0    ## for live run
...
if (( ${DRYRUN} ))
then
  rsync -n -avushi --stats --progress --log-file="${LOGFILE2}" /media/dataspace"${DESTDIR2}"/ "${MOUNT}${DESTDIR2}"
else
  rsync    -avushi --stats --progress --log-file="${LOGFILE2}" /media/dataspace"${DESTDIR2}"/ "${MOUNT}${DESTDIR2}"
fi

«Мы встретили врага, а он - мы!» - Уолт Келли (комиксы Pogo)

Я нашел это! Невидимый не значит, что его там нет.

Я не совсем понимаю, что произошло, но, поместив "$ {DRYRUN}" в командную строку rsync, он сделал первый аргумент rsync "". Видимо, это интерпретировалось как PWD, а не как ошибка. Таким образом, команда была перенесена "" и мой реальный источник в мое реальное место назначения, потому что rsync принимает несколько источников.

Остается вопрос: почему rsync считает, что «» означает текущий каталог, а не интерпретирует его как синтаксическую ошибку?

0
ответ дан 14 March 2012 в 01:34

Ваш случай настолько прост, что вы можете просто удалить кавычки вокруг переменной:

rsync $DRYRUN -avushi --stats --progress --log-file="${LOGFILE2}" /media/dataspace"${DESTDIR2}"/ "${MOUNT}${DESTDIR2}"

Но вам может понадобиться кавычки в другом случае, например, если параметр представляет собой путь, содержащий пробелы, которые может или не может быть определено. Итак, вот более элегантное решение:

linkdest="<OLD_BACKUP_PATH>"
rsync ${linkdest:+--linkdest="$linkdest"} -avushi --stats --progress --log-file="${LOGFILE2}" /media/dataspace"${DESTDIR2}"/ "${MOUNT}${DESTDIR2}"

Если $ linkdest пусто, ничего не будет вставлено. Если $ linkdest не является пустым, будет вставлено --linkdest = "$ linkdest" (и оно будет оцениваться как команда, а не как строка).

0
ответ дан 14 March 2012 в 01:34

Другие вопросы по тегам:

Похожие вопросы: