首页 > 其他分享 >完了,良许直播中删库了……

完了,良许直播中删库了……

时间:2023-04-02 13:04:21浏览次数:42  
标签:文件 后缀 mv sh filename 删库 直播 良许 new

大家好,我是良许。

今天跟大家聊个尴尬的事,大家可以本着看热闹不嫌事大的心态来听我唠唠。

经常来我直播间(视频号+抖音)的小伙伴都知道,我最近一直都在直播间手把手现场写 Shell 脚本。

就在前天晚上,我写 Shell 脚本的时候,不小心把当前目录下所有脚本(连同这个脚本本身)全部删除了,而且还全程直播了……

这是我做直播到现在最大的一次直播事故啊。。

完了,良许直播中删库了……_文件名

这个脚本的需求是这样的:把当前目录(包含子目录)下所有后缀为 ".sh" 的文件后缀变更为 ".shell",之后删除每个文件的第二行

我先把正确的脚本贴出来给各位看官看看:

#!/bin/bash 
ALL_SH_FILE=$(find . -type f -name "*.sh") 
for file in ${ALL_SH_FILE[*]} 
do 
    # filename=${file%.sh*}
    filename=$(echo $file | awk -F'.sh' '{print $1}') 
    new_filename="${filename}.shell" 
    mv "$file" "$new_filename" 
    sed -i '2d' "$new_filename" 
done

这个需求看起来蛮多的,但仔细拆解一下,其实要求就下面这几个:

  1. 找到当前目录下所有以 .sh 结尾的文件;
  2. 遍历这些文件,将后缀改为 .shell
  3. 删除每个文件的第二行。

我们在写代码的时候,一定不要着急动手,先拆解一下,这样写起来就容易很多。下面就逐一解决这些需求。

需求1:找到当前目录下所有以 .sh 结尾的文件

找文件,很容易就想到 find 命令。

find 命令结合的选项无非就是:-type-name-size-mtime ,其它的相对而言用得比较少。在这里,很明显使用 -type-name

要是连 find 命令都用不熟的小伙伴,赶紧拍一拍文末的命令课。

$ find . -type f -name "*.sh"

需求2:遍历这些文件,将后缀改为 .shell

遍历文件问题也不大,就是使用 for xxx in yyy 这种格式,这里的 yyy 就是我们上面找到的全部后缀 .sh 文件。

然后就是改后缀,肯定要使用到 mv 命令了。我们一般是这样修改文件名的:

$ mv old_filename new_filename

这里 old_filename 好办,就是我们一个个遍历的文件名。关键是 new_filename ,怎么拼凑出我们需求的文件名。

仔细分析一下,就是将 old_filename 里的 .sh 后缀去掉,再拼上 .shell 后缀。

去掉 .sh 后缀的方法有很多,这里介绍两个:

  1. 字符串切片
$ filename=${file%.sh*}
  1. 利用 awk 命令切片

这里用到一个很巧妙的方法,就是把 .sh 视为分隔符,然后提取的第一列就是文件名了。

$ filename=$(echo $file | awk -F'.sh' '{print $1}')

这样我们就得到了没有 .sh 后缀的文件名了,我们再拼上 .shell 后缀就行了。

$ new_filename="${filename}.shell"

然后,我们再使用 mv 命令修改一下文件名就大功告成了。

需求3:删除每个文件的第二行

这个需求毫无难度,sed 一下就行了。所以说,文本处理三剑客在 Shell 脚本里真的是无处不在,大家一定要好好掌握。

$ sed -i '2d' "$new_filename"

三个需求都实现之后,我们再写起代码来就没啥难度了。

直播中,为了演示方便,我创建了三个 .sh 后缀文件。

完了,良许直播中删库了……_后缀_02

然后,我一顿操作猛如虎,很快就写好了代码。

完了,良许直播中删库了……_后缀_03

当我雄心壮志敲下回车键运行脚本,打算在直播间秀一把时,得到了这样的结果:

完了,良许直播中删库了……_当前目录_04

完了,怎么结果跟我预想的不一样?

完了,我的那几个 .sh 文件呢??

完了,我的脚本本身去哪了???

完了,难道我删库了??

完了,两个直播间加起来有 400 多号人正盯着我看呢。。

完了完了,翻车了,出丑了,尴尬了。。

你们看我我上面的操作记录就可以看到此时的我内心有多慌乱。。

但我已经连续直播 5 个多月了,最高的时候有 3300+ 人在线,早已经身经百战,什么大风大浪没见过?

完了,良许直播中删库了……_后缀_05

于是我迅速调整好心态,努力回想是什么原因导致了这次翻车事故。

但是脚本已经没了,只剩下孤零零的一个 new_filename 这个文件,想复查代码都没办法。

我努力回想,怎么也想不到到底哪里出错了。

这个new_filename 也一直在那边,仿佛瞪着眼睛看着我,也在嘲笑我。

今天在写这篇文章的时候,突然想到,所有的 .sh 文件都不见了,突然冒出了一个 new_filename 文件,或许可以从它下手。

再回看一眼代码,我恍然大悟!!

我特么在 mv 那里,new_filename 变量前忘记写了 $ 符号了!!然后就变成了这样:

$ mv "$file" "new_filename"

这下好了,所有的 .sh 文件全部重命名成了 new_filename 了!

怪不得所有的 .sh 文件全部离奇失踪。。

我再写一遍代码,然后手动把 new_filename 前面的 $ 去掉,成功复现了昨晚的现象。

终于是真相大白了……

所以啊,写代码一定要慎重再慎重,小心再小心,否则的话就有可能出现这种意想不到的结果。

实际上,之前在公司上班的时候,我有一次误操作,把我自己的代码全部删除了。。还好有 Git ,否则我估计就要扫地出门了。。

Linux 下,不仅 rm 命令很危险,mvcp 命令同样也没你想得那么安分,一不小心就可能把文件移没了或者覆盖了。

所以大家在使用这三个命令的时候,一定要再三确认之后再敲回车键,否则可能连哭都来不及了。

大家一起引以为戒。

PS :直播中有个小插曲。有个黑粉看到我出错了,开始各种挖苦嘲讽。好在直播间大家都比较友好,纷纷帮我怼回去。

写代码哪可能不会出错?你要是那么厉害,也没空来我直播间看我写代码。程序员本来就是边写代码边调试的,能够一次成功的,估计没几个人能做到。

而且这种人,大概率在现实中也是唯唯诺诺,在领导面前卑躬屈膝,薪资不过万之人。只有在网络上去喷别人,才可以找到一点存在感。

呵呵。

标签:文件,后缀,mv,sh,filename,删库,直播,良许,new
From: https://blog.51cto.com/yychuyu/6164666

相关文章

  • 完了,良许直播中删库了……
    大家好,我是良许。今天跟大家聊个尴尬的事,大家可以本着看热闹不嫌事大的心态来听我唠唠。经常来我直播间(视频号+抖音)的小伙伴都知道,我最近一直都在直播间手把手现场写Shell脚本。就在前天晚上,我写Shell脚本的时候,不小心把当前目录下所有脚本(连同这个脚本本身)全部删除了,而且......
  • 完了,良许直播中删库了……
    大家好,我是良许。今天跟大家聊个尴尬的事,大家可以本着看热闹不嫌事大的心态来听我唠唠。经常来我直播间(视频号+抖音)的小伙伴都知道,我最近一直都在直播间手把手现场写Shell脚本。就在前天晚上,我写Shell脚本的时候,不小心把当前目录下所有脚本(连同这个脚本本身)全部删除了,而且还......
  • 直播网站源码,Android中点击图片放大的简单方法
    直播网站源码,Android中点击图片放大的简单方法简单的思路就是把要放大的图片显示在一个对话框中显示出来 Java代码: publicvoidonThumbnailClick(Viewv){//finalAlertDialogdialog=newAlertDialog.Builder(this).create();//ImageViewimgView=getView();//di......
  • 直播流播放组件
    01使用 <Playerid="mycamera"url="xxx.flv"/>02封装第三方库:flv.js播放组件importReact,{useRef,useEffect}from'react';//传入id和链接constPlayer=({id,url})=>{let{current:player}=useRef(null);//实例......
  • DTALK直播预约 | 数据资产管理:金融机构数据价值释放的必经之路
    当前,数据对金融机构业务和发展的重要性日益凸显,释放数据生产力已经成为金融机构进行全面数字化转型的核心,这就要求金融机构以数据资产为纲不断提升自身数据资产管理能力。本期DTALK我们邀请到雅拓信息解决方案专家尹晓中,为大家带来《数据资产管理——金融机构数据价值释放的必经......
  • 直播回顾 | 点击率提升400%,Ta是怎么做到的?
    Discovery第18期直播已于3月30日圆满结束,本期直播邀请天眼查做客直播间,从天眼查与华为Push用户增长服务合作历程切入,聚焦用户增长,分享提升应用活跃度和渠道ROI的经验与见解。一起来回顾本期精彩内容吧!【精彩对话】Q1:天眼查为什么选择华为Push用户增长服务实现拉新、促活和转......
  • 直播平台源码,qt绘画事件-设置背景图片
    直播平台源码,qt绘画事件-设置背景图片头文件 voidpaintEvent(QPaintEvent*);​cpp文件: voidMainWindow::paintEvent(QPaintEvent*){    //创建画家,指......
  • 成品直播源码推荐,TableView/CollectionView 滑动顶部效果优化
    成品直播源码推荐,TableView/CollectionView滑动顶部效果优化默认弹簧效果在使用UITableView或者UICollectionView时,如果开启弹框效果,下拉是整个内容就会偏移,松手就......
  • 直播平台源代码,iOS中使用 Date/NSDate 来获取时间
    直播平台源代码,iOS中使用Date/NSDate来获取时间将Date转为字符串类型extensionDate{  ///将Date转化为固定格式的字符串  ///-parameterformatter:时间......
  • 直播平台搭建源码,Android进度条ProgressBar颜色的渐变设置
    直播平台搭建源码,Android进度条ProgressBar颜色的渐变设置1.第一步 在res/drawable目录下新建自己的样式文件my_progressBar.xml文件。 <?xmlversion="1.0"encod......