Как я могу проверить, внес ли rsync какие-либо изменения в ударе?

Можно использовать grep:

grep -R "Ignoring request to authentication address" .

11
26.04.2015, 02:18
2 ответа

Основываясь на комментариях к моему первоначальному вопросу, сделайте вывод rsync в stdout с флагом -i и используйте условие проверки нестрокового кода, чтобы посмотреть, действительно ли что-то изменилось в процессе проверки кода ошибки. Обертывание команды rsync в переменную позволяет выполнить проверку.

RSYNC_COMMAND=$(rsync -aEim --delete /path/to/remote/ /path/to/local/)

    if [ $? -eq 0 ]; then
        # Success do some more work!

        if [ -n "${RSYNC_COMMAND}" ]; then
            # Stuff to run, because rsync has changes
        else
            # No changes were made by rsync
        fi
    else
        # Something went wrong!
        exit 1
    fi

Потенциальный минус - вы должны потерять многословный вывод, но вы всегда можете записать его в файл вместо этого.

9
27.01.2020, 19:59

Я хотел более строгого решения. Я не хочу использовать grep дляNumber of created files:(сообщение может быть на другом языке )или удалить все строки, кроме двух, в -vвывод (кто знает, какое резюме rsyncбудет напечатано в следующей версии? ).

edit:Я обнаружил, что вы можете установить формат вывода rsyncдля списка измененных файлов с помощью--out-format:

rsync -a --verbose source-dir target-dir \
     --out-format='changed file: %i %n%L' \
  | fgrep 'changed file:'

Или, если вас не волнует время файла, но вы хотите сделать минимальное копирование, вариант с расширенным и очищенным-a:

rsync -r --links --devices --specials \
      --delete --checksum \
      --omit-dir-times --omit-link-times --ignore-times \
      --prune-empty-dirs \
      --verbose \
    source-dir target-dir

Старый ответ :Я обнаружил, что вы можете установить формат журнала rsync, но не формат его stdout (см.man rsyncd.conf).

Например, добавьте «Файл изменен!» на каждую строку с реально измененным файлом, а затем grepдля него:

rsync -a \
    --log-file=/tmp/rsync.log \
    --log-file-format="File changed! %f %i" \
    source-dir target-dir

if fgrep "File changed!" /tmp/rsync.log > /dev/null; then
    echo "rsync did something!"
fi
3
27.03.2020, 02:01

Теги

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