博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
每日一道shell 练习(05)——批量打包文件
阅读量:7096 次
发布时间:2019-06-28

本文共 1128 字,大约阅读时间需要 3 分钟。

1. 习题

找到 /123 目录下所有后缀名为 .txt 的文件

  • 批量修改.txt 为 .txt.bak
  • 把所有.bak 文件打包压缩为 123.tar.gz
  • 批量还原文件的名字,即把增加的.bak 再删除

2. 习题分析

  1. 首先要想办法找出 .txt 结尾的文件,用 find 命令。
  2. 打包命令用 tar czvf 就可以搞定了,关键是如何同时将所有 .bak 文件打包。
  3. 还原文件名有点复杂,关键是如何找到原来的文件名。

3. 具体脚本

在脚本总已经加进了我的分析,可以看看

[root@cenvm71 work]# cat file_tar.sh #!/bin/bash# 将符合条件的,以.txt 结尾的文件,保存到 /tmp/file.txt find /usr/local/sbin/work/ -maxdepth 1 -type f -name "*.txt" > /tmp/file.txt# 用循环逐行读取 /tmp/file.txt 文件,修改文件名为 .txt.bakwhile read line ; do  mv $line $line.bakdone

【分析】

  1. 如果只是遍历目录,找出某种文件,然后修改一下文件名,其实一条命令就可以搞定:
find  /usr/local/sbin/work  -type f -name "*.txt"  -print0 | xargs -d '\0'  mv {}  {}.bak

要注意,find 命令的查找路径需要使用绝对路径,不要用相对路径。如果用 xargs 命令接在后面,则用 -print0 选项,将某些包含空格的特殊文件名,也包含在内,不会处理错误。

  1. 脚本中的 while 循环这种方式其实也是很常见的,将结果临时保存在一个文件中,然后再通过while 循环读取处理。
  2. 大家看到脚本中多次使用 /tmp/file.txt 这个文件了吧。将 .txt 结尾的文件保存到一个文件中,这种办法就恨到地解决了我们在习题分析中提出的第3个问题啦。
  3. 我的所有.txt 结尾的文件都在 /usr/local/src/sbin/work 目录。

​ 如果你没有 .txt 结尾的文件,可以用下面的命令生成一堆,用来做实验:

for  i in `seq  30`;do  touch  $i.txt;done

​ 这样就可以生成30个 .txt 结尾的文件用来做实验了。

4. 结语

今天的习题帮大家复习了find命令,xargs 命令,还有for 循环,while 循环的常见用法,关键是学习那种处理问题的思路。

转载于:https://blog.51cto.com/hellocjq/2111993

你可能感兴趣的文章
软件体系结构的第二次实验
查看>>
sql语句练习题
查看>>
无聊记记
查看>>
ODI Scenario 场景
查看>>
操作JSON对象
查看>>
random模块使用方法
查看>>
使phongegap的程序纵向不滚动
查看>>
NSPredicate predicateWithFormat方法支持的格式
查看>>
lmbench andlmbench 移植测试
查看>>
三十天学不会TCP,UDP/IP网络编程-ARP -- 连接MAC和IP
查看>>
Linux操作系统下三种配置环境变量的方法
查看>>
转:序列化Python对象
查看>>
同步和异步的区别?
查看>>
Feeling after reading the blog of Agile development
查看>>
牛客网 Wannafly挑战赛 C 列一列 简单题 (题目有点坑)
查看>>
mysql 相同表求解统一字段不同内容的交集
查看>>
对js里bind函数的理解
查看>>
iOS 模态视图,视图之间的切换
查看>>
iptables
查看>>
.NET自动识别GB2312与UTF-8编码的文件
查看>>