引言
同样一个需求,不同阶段的开发者,所使用的工具和解决思路也不尽相同。
菜鸟程序员不断采坑,一步步总结自己的教训,不断升级,学会最优的解决方案,这是成长。
今天我们说一个“文件备份”的案例,看看初级程序员,和高级程序员,到底差距在哪里!
在线求助
下面是一个小哥的自述:
我正在使用 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 :_)
我是 @程序员小助手 ,持续分享编程知识,欢迎关注。
领取专属 10元无门槛券
私享最新 技术干货