![带有自动文件夹的 scp 备份命令在执行两次时不会覆盖旧文件](https://linux22.com/image/173810/%E5%B8%A6%E6%9C%89%E8%87%AA%E5%8A%A8%E6%96%87%E4%BB%B6%E5%A4%B9%E7%9A%84%20scp%20%E5%A4%87%E4%BB%BD%E5%91%BD%E4%BB%A4%E5%9C%A8%E6%89%A7%E8%A1%8C%E4%B8%A4%E6%AC%A1%E6%97%B6%E4%B8%8D%E4%BC%9A%E8%A6%86%E7%9B%96%E6%97%A7%E6%96%87%E4%BB%B6.png)
我想从我的网站进行备份。我正在使用以下命令,使用正确的数据自动创建目录:
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"