前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux下实现自定义命令行工具小技巧

Linux下实现自定义命令行工具小技巧

作者头像
大刚测试开发实战
发布2022-11-14 14:20:27
7910
发布2022-11-14 14:20:27
举报
文章被收录于专栏:大刚测试开发实战

事件背景

最近几天在Linux系统部署服务过程中,常常会用到tar(压缩/解压缩)命令,如果只有个别两个xx.tar.gz文件,还能通过tar -xvf xx.tar.gz命令快速实现解压缩操作,但如果几十、几百个tar包的话,使用此命令一一解压未免过于繁琐。因此,可以通过for循环来实现批量解压缩:

代码语言:javascript
复制
for tar in *.tar.gz;do tar -xvf $tar;done

但随之而来的问题是,如果有多个目录下都有大量的压缩包需要解压,那每解压一个目录下的文件都要敲一遍此命令?能否自定义一个命令行工具,像系统命令ls/mv/cp/tar/ps···那样,在任意目录下都能执行,并实现批量解压缩的操作?答案肯定是可以的。实现思路:

  • 在存放可执行程序的目录下创建一个可执行脚本文件
  • 将上述批量解压缩命令写在可执行文件中
  • 赋予该文件执行权限、重新加载配置

实现过程

1.创建shell脚本

  • Linux下存放脚本目录及作用

目录

作用

/usr/bin

当前用户的程序,为系统预装的可执行程序,会随着系统升级而改变。

/usr/local/bin

用户放置自己的可执行程序的地方,不会被系统升级而覆盖同名文件。

  • 创建脚本
代码语言:javascript
复制
cd /usr/local/bin
touch tarall

取名tarall(名字任意,取名helloworld也可以),内容如下:

代码语言:javascript
复制
#!/bin/bash
# author by jigang.chen
for tar in *.tar.gz;do tar -xvf $tar;done

2.赋予文件执行权限

代码语言:javascript
复制
chmod +x /usr/local/bin/tarall  # 赋予tarall执行权限
source /etc/profile  # 重新加载配置文件(必须,否则系统无法找到这个命令)

3.测试脚本

例如:解压缩/home/test目录下的所有以tar.gz结尾的文件,其中ab.tar.gz文件包含a.txt、b.txt两个文件,cd.tar.gz包含c.txt、d.txt两个文件

通过截图可以看出,ab.tar.gz和cd.tar.gz已经解压缩成功,测试通过。

4.优化脚本

上述tarall脚本仅仅实现了“解压缩当前目录下所有以tar.gz结尾的文件”的功能,细心的同学会发现,该脚本还无法解压缩.tar格式的压缩文件,而且也没有异常处理或友好提示。因此,我们可以对脚本进行优化,取名targz,内容如下:

代码语言:javascript
复制
#!/bin/bash
# author by jigang.chen

gz_file=$(ls *.tar.gz 2>/dev/null | wc -l)
tar_file=$(ls *.tar 2>/dev/null | wc -l)

if [ "$gz_file" != "0" ]
then
    for tar in *.tar.gz;do tar -xvf $tar;done
else
    echo "no such *.tar.gz file"
fi

if [ "$tar_file" != "0" ]
then
    for tar in *.tar;do tar -xvf $tar;done
else
    echo "no such *.tar file"
fi

5.测试优化后的脚本

  • 不存在tar或tar.gz文件时

如:在test2目录下执行解压缩操作(test2目录下无压缩文件,只有一个txt文件)

通过截图可以看出,targz并未解压任何文件,并给出了脚本中自定义的友好提示内容,测试通过。

  • 同时存在tar或tar.gz文件时

例如:解压缩/home/test目录下的所有以tar.gz和.tar结尾的文件,其中ab.tar.gz文件包含a.txt、b.txt两个文件,cd.tar.gz包含c.txt、d.txt两个文件,ef.tar包含e.txt、f.txt两个文件

通过上图可以看出,tar.gz和.tar结尾的文件均已成功解压,测试通过。

  • 仅存在tar或tar.gz文件时

解压缩成功,提示语与脚本中定义的一致,测试通过。

小结

以上就是利用shell脚本实现自定义系统命令行工具的实践过程,整体比较简单,主要记录和分享实现思路。同样地,这种方法也可以复制在实现其他自定义命令工具上。当然,上述脚本还存在很多可以优化的地方,如:

  • 如何解压指定目录下的文件
  • 如何解压指定格式的压缩文件
  • ......
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-05-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 测试开发实战 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
命令行工具
腾讯云命令行工具 TCCLI 是管理腾讯云资源的统一工具。使用腾讯云命令行工具,您可以快速调用腾讯云 API 来管理您的腾讯云资源。此外,您还可以基于腾讯云的命令行工具来做自动化和脚本处理,以更多样的方式进行组合和重用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档