У меня есть скрипт, который использует rsync для синхронизации данных в удаленном -> локальном сценарии. Сразу после запуска команды rsync проверьте, равен ли код ошибки нулю или нет. Если его ноль, дальнейшие команды выполняются. Это, однако, не учитывает тот факт, что rsync мог успешно работать, но не вносил никаких изменений. Из-за этого условие равного нуля будет выполняться независимо, что немного избыточно.
rsync -aEivm --delete /path/to/remote/ /path/to/local/
if [ $? -eq 0 ]; then
# Success do some more work!
else
# Something went wrong!
exit 1;
fi
Что было бы лучшим подходом для расширения этого, чтобы проверить, действительно ли были какие-либо изменения, основанные на запущенной команде rsync Я читал, что флаг -i может обеспечить вывод на стандартный вывод, но как это можно поместить в условный блок?
shell-script
files
rsync
Джеймс Уайт
источник
источник
-v
туда, поэтому он уже предоставляет информацию, необходимую вам для вывода ... например, список файлов, которые были фактически отправлены. Если ничего не изменилось, это просто./
.a=$("rsync command")
. Это выполнитrsync
команду и сохранитstdout
вa
. Тогда вы можете запустить тесты наa
| grep /
или что-то в этом роде, а затем проверить состояние выхода grep с помощью значения$?
должно быть 1, если не было вывода.Ответы:
Основываясь на комментариях к моему первоначальному вопросу, сделайте вывод rsync в stdout с флагом -i и используйте условие проверки не строки, чтобы увидеть, действительно ли что-то изменилось в проверке кода ошибки. Заключение команды rsync в переменную позволяет выполнить проверку.
Потенциальный недостаток, вы должны потерять подробный вывод, но вы всегда можете записать его в файл.
источник
Я хотел более строгое решение. Я не хочу использовать grep
Number of created files:
(сообщение может быть на другом языке) или удалять все строки, кроме двух в-v
выводе (кто знает, какое резюмеrsync
будет напечатано в следующей версии?).Я обнаружил, что вы можете установить формат
rsync
журнала, но не формат его стандартного вывода (см.man rsyncd.conf
).Например, добавьте «Файл изменен!» для каждой строки с фактически измененным файлом, а затем
grep
для него:источник