首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

远程备份Bug:你黑压压几十行,大神只轻轻加了一个点,高下立辨!

引言

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

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

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

在线求助

下面是一个小哥的自述:

我正在使用 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>&1

if [ "$?" -ne "0" ]; then

echo "failed ... trying method 2"

scp -prq server1:dir1 server2:dir2

fiexit

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

直接运行 scp 拷贝 server1:dir1下所有文件到 server2:dir2 目录;

如果执行失败,则拷贝dir1 到 dir2。

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

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

高级程序员

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

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

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

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

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

写在最后

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

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

Happy coding :_)

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

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200519A0PZ1R00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券