Rsync должен выдвигать дельты после начальной синхронизации. Другой вариант - сделать снимок расположения файла. Это будет зависеть от того, используете ли вы LVM или имеете ли файловую систему, поддерживающую моментальные снимки. Вы можете сделать снимок, а затем синхронизировать файл с удаленным расположением. Затем удалите снимок. Мне также нравится эта идея, потому что вы не трогаете живой файл.
Вот сценарий, который я только что создал, чтобы продемонстрировать, как это сделать.
#!/usr/bin/env bash
warn()
{
printf '%s\n' "$@" >&2
}
die()
{
local st="$?"
warn "$@"
exit "$st"
}
anotherUser() {
read -p "Add another user [y/n] " yn
if [[ $yn = *[yY]* ]]; then
checkUser
fi
exit
}
checkUser() {
while :
do
read -p "Enter user: " userName
if id $userName 2>/dev/null
then echo "User exists"
anotherUser
else
read -p 'Enter pass: ' passWord
adduser "$userName"
echo "$passWord" | passwd "$userName" --stdin
printf "User %s has been added\n" "$userName"
exit
fi
done
}
if (( EUID == 0 )); then
checkUser
else
die "You must be root"
fi
Не забудьте скопировать сценарий на удаленные серверы и выполнить его следующим образом
ssh -t root @ remoteserver 'bash accountScript'
Вместо того, чтобы полагаться на скрипты, проверьте ansible , это снижает вероятность ошибок при выполнении этих задач и может выполняться несколько раз. раз без проблем, поскольку он идемпотентный. Он также безагентный и работает через ssh.