fix: restore files with original ownership using --chown

rsync -a with sudo restores files as root. Add --chown=$(id -u):$(id -g)
to restore commands so files get owned by the calling user.
This commit is contained in:
x3
2026-09-08 10:48:56 +00:00
parent 86a8c44da5
commit b7f11c36b6
+7 -7
View File
@@ -227,9 +227,9 @@ bool RsyncManager::restore_files(const std::string& snapshot_path,
std::string cmd;
if (!sudo_password.empty()) {
cmd = "echo '" + sudo_password + "' | sudo -S rsync -aAX \"" + src + "\" \"" + dst + "\" 2>&1";
cmd = "echo '" + sudo_password + "' | sudo -S rsync -aAX --chown=$(id -u):$(id -g) \"" + src + "\" \"" + dst + "\" 2>&1";
} else {
cmd = "rsync -aAX \"" + src + "\" \"" + dst + "\" 2>&1";
cmd = "rsync -aAX --chown=$(id -u):$(id -g) \"" + src + "\" \"" + dst + "\" 2>&1";
}
g_message("restore cmd: sudo rsync -aAX \"%s\" \"%s\"", src.c_str(), dst.c_str());
@@ -293,14 +293,14 @@ bool RsyncManager::restore_full_snapshot(const std::string& snapshot_path,
std::string cmd;
if (!sudo_password.empty()) {
cmd = "echo '" + sudo_password + "' | sudo -S rsync -aAX --delete \""
+ snapshot_path + "/\" \"" + restore_dest + "/\" 2>&1";
cmd = "echo '" + sudo_password + "' | sudo -S rsync -aAX --chown=$(id -u):$(id -g) --delete \""
+ snapshot_path + "/\" \"" + restore_dest + "/\" 2>&1";
} else {
cmd = "rsync -aAX --delete \""
+ snapshot_path + "/\" \"" + restore_dest + "/\" 2>&1";
cmd = "rsync -aAX --chown=$(id -u):$(id -g) --delete \""
+ snapshot_path + "/\" \"" + restore_dest + "/\" 2>&1";
}
g_message("full restore cmd: sudo rsync -aAX --delete \"%s/\" \"%s/\"", snapshot_path.c_str(), restore_dest.c_str());
g_message("full restore cmd: sudo rsync -aAX --chown=$(id -u):$(id -g) --delete \"%s/\" \"%s/\"", snapshot_path.c_str(), restore_dest.c_str());
if (on_progress) {
RsyncProgress p;