带有自动文件夹的 scp 备份命令在执行两次时不会覆盖旧文件

带有自动文件夹的 scp 备份命令在执行两次时不会覆盖旧文件

我想从我的网站进行备份。我正在使用以下命令,使用正确的数据自动创建目录:

scp -rp [email protected]:webdir/ /mnt/Webseite/Backups/"$(date +"%Y-%m-%d")"

这非常有效。但是,如果我在同一天第二次执行相同的命令,它会将目录“webdir”复制到日期文件夹中。

第一次执行:

/mnt/Website/Backups/2020-05-22/"files"

第二次执行:

/mnt/Website/Backups/2020-05-22/"files"
/mnt/Website/Backups/2020-05-22/webdir/"files"

但我想覆盖同一天的这些“旧”备份。这样我每天只有一个备份。

我在这里做错了什么?我想这很容易解决...谷歌无法帮助我。

答案1

我做了一些测试,发现我之前的答案是不正确的。我后来发现实际上最好该目录不存在于目的地上。第二次运行该命令时,预计该文件夹将位于 DATE 文件夹中,因为第一次复制时就像源目录被重命名一样(因为目标不存在)。第二次它存在时,scp 计算出您想要将该目录克隆到现有目录中。

解决您的问题的方法是先将其删除...

rm -rf /mnt/Webseite/Backups/"$(date +"%Y-%m-%d")" #or move it if you want to keep the files
scp -rp [email protected]:webdir /mnt/Webseite/Backups/"$(date +"%Y-%m-%d")"

答案2

您需要创建目标目录,以便源的最顶层目录不会被选择为您创建它。副作用是webdir目录本身将包含在备份树中 - 如果这是问题的关键,请考虑rsync使用

dst="/mnt/Webseite/Backups/$(date +"%Y-%m-%d")"
mkdir -p "$dst"
scp -rp [email protected]:webdir/ "$dst"

您可以通过此示例看到这一点

# Set up the scenario on the remote source
mkdir -p /tmp/src/webdir
touch /tmp/src/webdir/{a,b,c}

# Copy the first time, and review the results
dst="/tmp/dst/webseite/backups/$(date +"%Y-%m-%d")"
mkdir -p "$dst"
scp -rp remotehost:/tmp/src/webdir/ "$dst"

find "$dst" | sort

/tmp/dst/webseite/backups/2020-05-23
/tmp/dst/webseite/backups/2020-05-23/webdir
/tmp/dst/webseite/backups/2020-05-23/webdir/a
/tmp/dst/webseite/backups/2020-05-23/webdir/b
/tmp/dst/webseite/backups/2020-05-23/webdir/c

# Change some files
touch /tmp/src/webdir/{d,e}

# Copy the second time, and review the results
scp -rp remotehost:/tmp/src/webdir/ "$dst"

find "$dst" | sort

/tmp/dst/webseite/backups/2020-05-23
/tmp/dst/webseite/backups/2020-05-23/webdir
/tmp/dst/webseite/backups/2020-05-23/webdir/a
/tmp/dst/webseite/backups/2020-05-23/webdir/b
/tmp/dst/webseite/backups/2020-05-23/webdir/c
/tmp/dst/webseite/backups/2020-05-23/webdir/d
/tmp/dst/webseite/backups/2020-05-23/webdir/e

最后,如果您确实不想website在备份(目标)目录树中使用,请rsync改用:

rsync -a remotehost:/tmp/src/webdir/ "$dst"

相关内容