заставьте rsync ждать подтверждения перед фактическим изменением файлов

Я делаю синхронизацию между локальной и удаленной папки. Случилось так, что я потерял один файл по дурацкой команде.

Я привык к унисону и тому, как вы подтверждаете ("идти?") перед выполнением фактической передачи файлов.

есть ли такая опция с rsync? (нет унисон на стороне сервера)

спасибо!

11
задан meduz
28.01.2023 8:06 Количество просмотров материала 2840
Распечатать страницу

4 ответа

вместо официальной опции "-- confirm", собственный" пакетный режим " rsync может быть использован для обхода необходимости дважды вычислять разницу между двумя путями. Пакетный режим был предназначен для распределения изменений по зеркалам (однократное вычисление, обновление нескольких одинаковых деревьев). Создаются два файла: пакетный файл, содержащий обновления, и простой удобный скрипт для запуска обновления (в конце rsync man page С подробностями).

здесь bash обертка для абстрагирования процесса:

#!/bin/bash

cleanup ()
{
    rm ${BFILE} ${BFILE}.sh &>/dev/null
}

# generate tmpfile
BFILE=$( mktemp )

# rsync command
if ! rsync --only-write-batch="${BFILE}" --verbose "$@"; then
    cleanup
    exit 1
fi

# confirmation
read -p "Continue (y/N)? " confirm
if [ "$confirm" != "y" ]; then
    echo "Aborting"
    cleanup
    exit 1
fi

# carve up arguments
dest="${@: -1}"         # last argument
host="${dest%%:*}"      # host:path
path="${dest#*:}"
opts="${@:1:$(($#-2))}" # everything but the last two args
if [ "$host" = "${path}" ]; then
    # local
    sh "${BFILE}.sh"
else
    # remote
    ssh "$host" rsync --read-batch=- "${opts}" "${path}" <"${BFILE}"
fi

cleanup

обратите внимание, что так как этот скрипт пишет в $TMP_DIR, вы можете столкнуться с ограничениями пространства, если вы перемещаете действительно большие данные (больше, чем ваш /tmp, например).

3
отвечен Steve 2023-01-29 15:54

вы можете использовать опцию-n с rsync для выполнения сухого прогона. rsync сообщит вам, какие операции он бы выполнил, не выполняя их. Если вы довольны результатами, повторите запуск без параметра-n.

6
отвечен Mike Fitzpatrick 2023-01-29 18:11

вы можете сделать rsync для резервного копирования файлов при перезаписи, используя опцию -- backup,

 -b, --backup                make backups (see --suffix & --backup-dir)
     --backup-dir=DIR        make backups into hierarchy based in DIR
     --suffix=SUFFIX         backup suffix (default ~ w/o --backup-dir)

после запуска rsync вы можете сканировать backup-dir на наличие файлов и спрашивать один за другим, нужно ли его восстанавливать.

5
отвечен zb' 2023-01-29 20:28

к сожалению, в Rsync на момент написания нет встроенного метода.

решение Майка Фитцпатрика будет работать нормально, однако, если у вас очень большое дерево каталогов, вы можете сделать что-то, что не заставит rsync снова пройти через все файлы

изменить: Существует также ошибка, при которой он не будет удалять файл назначения... чем больше и больше я смотрю на это, это решение нарушается... Я оставляю его в том, что он может работать в вашем случае, а также если кто-то хочет исправить она. Кроме того, кто-то должен подать официальный запрос https://bugzilla.samba.org/enter_bug.cgi?product=rsync

Я написал этот скрипт:

#! /bin/bash

# Make a temp file for storing the output of rsync

tmpfile=$( mktemp )  &&

# Do all the hard work ( get the list of files we need to update ), 
#  but dont actually change the filesystem

rsync --dry-run --out-format='RSYNC_CONFIRM %i %n%L' "$@" | grep RSYNC_CONFIRM | awk '{ print  }' > $tmpfile &&


# Output to the user what we propose to do
rsync --dry-run --itemize-changes --files-from=$tmpfile "$@" &&

# Alternatively, we could just output $tmpfile... but whatever...

read -p "Continue? (y/n)?" &&

if [[ $REPLY = [yY] ]]
then
{
  rsync --files-from=$tmpfile "$@"
}
fi

rm $tmpfile
  • попробуйте вставить скрипт в файл с именем rsync-confirm.bash

  • затем chmod +x rsync-confirm.bash

  • затем ./rsync-confirm.bash -rvh /etc/ /tmp/etc/

этот сценарий может быть немного багги, я заметил, что он не очень нравится, если у вас нет слэш на исходный каталог...

4
отвечен Dave Butler 2023-01-29 22:45

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх