scp创建远程目录_远程备份Bug:你黑压压几十行,大神只轻轻加了一个点,高下立辨...

引言

同样一个需求,不同阶段的开发者,所使用的工具和解决思路也不尽相同

菜鸟程序员不断采坑,一步步总结自己的教训,不断升级,学会最优的解决方案,这是成长。

今天我们说一个“文件备份”的案例,看看初级程序员,和高级程序员,到底差距在哪里

1d2ccd306c5a9d92930f02340d670ede.png

在线求助

下面是一个小哥的自述:

我正在使用 SCP ,从一台远程服务器 server1 的目录复制到另一台远程服务器 server2 上的新目录,像下面这样:

scp -prq server1:dir1 server2:dir2

如果 server2 上不存在 dir2,这本身没啥问题,它会创建一个名为 dir2 的新目录,其中包含来自 server1 上 dir1 的所有内容。

可是,服务器的文件都不是一成不变的对吗?

当 server2 上已经存在 dir2 时,问题就出现了,server2 的 dir2 中却创建了 dir1 的副本,称为 dir1。

可是,我无法预先知道这一点,也无法预先删除 server2 上的 dir2。

一个初级的方案

上面的问题,这位小哥给出了一个粗略的脚本用于实现,并且运行起来似乎正常:

#!/bin/shecho "method 1"scp -prq server1:dir1/* server2:dir2/ >/dev/null  2>&1if [ "$?" -ne "0" ]; then        echo "failed ... trying method 2"        scp -prq server1:dir1 server2:dir2fiexit

上面的方案什么思路呢?大致如下:

  1. 直接运行 scp 拷贝 server1:dir1下所有文件到 server2:dir2 目录;
  2. 如果执行失败,则拷贝dir1 到 dir2。

实现的方式很冗余,且没有什么安全性,可靠性。

这个解决方案肯定不是最优解,只是出现问题,临时打上的一个补丁,不是长久之计,也没有真正解决疑惑。

高级程序员

高级程序员思考问题,自然不是这样临时性的,他会在既有框架内寻找最优解

scp 完全赋能了解决方式,只是初级程序员还没有达到熟练运用 man page 的程序。所以拐着弯走了歧路。

scp -prq server1:dir1/. server2:dir2/

没错,大神给出的就是这一行,只是加了一个点

这会复制该目录的内容,而不是目录本身,而且比 * 号更为便捷。

写在最后

高级程序员值钱在哪儿?关键时候的这个“点”,可挽救系统于万一。巧妙就巧妙在这儿!

经验和熟练度,让人走更少的弯路。

Happy coding :_)

我是 @程序员小助手 ,持续分享编程知识,欢迎关注。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值