实战一
要求:将某文件夹及其子文件中所有 readme.txt 的文件找出来,统计文件中包括name,age,base address等字段信息。(因为存在重名冲突,因此需要在抓取的过程中编号来修改其名称)
脚本实现:
#!bin/bash
Count=1
for line in $( find -name readme.txt )
do
echo "find ${line}"
name0=$(printf "%05d" $Count)
name=${name0:0:5}
echo $name
cp ${line} "readme"$name".txtnew"
(( Count=Count+1))
echo $Count "Rename OK"
done
脚本释义:
第一句表示由bin路径下的bash解释器来解释该脚本,第二句定义count变量,第三句for循环,括号内是查找搜索语句,$()表示执行括号内的语句,并把返回值保存,以供查找。第三四do,第五句打印line的值,第六句 %05d 表示至少输出5位数字,取count的值赋给name0,第七句name=${name0:0:5},将name0从左到右的0~5位数据赋值给name(列如name0数据为123456,那么name被赋值为12345,没有6),第八句打印name;第九句重命名;第十句自增,等同于Count=$(( Count+1)) 或者 let Count++(Count和++之间不能有空格);第十一句打印;十二句结束。
注意:语法结构:for ,do ,done;类似的还有while ,do ,done。
参考博客:
语句实现:find -name *.txtnew -exec grep -e name -e age -e "base address" {} >ok.txt \;
语句释义:查找所有以.txtnew结尾的文件,-exec 后面跟执行语句,语句以"\;"结束,{}表示前面find出来的值,当值存在或者为真时,执行-exec后面的指令;grep 在文件内容上抓取关键词,多个关键词使用 -e 连接;>表示将指令执行结果转存为ok.txt。
实战二
要求:不小心将压缩包解压在当前文件夹,导致目录很乱,需要删除解压出来的文件。
脚本实现:
mkdir tmp
tar xvf *.tar -C tmp
rm -rf $(ls tmp) (加上-r-f可以不用每次询问)
脚本释义:第一句创建文件夹;第二句将tar包压缩到指定目录tmp;第三句删除tmp中ls列出来的所有文件。
实战三
要求:查看文件大小
语句实现:du -h --max-depth=4 文件名/
语句释义:展示最大深度为4的文件及大小,--max-depth=4最大深度为4。
实战四
要求:将目标文件夹的windows文件全部转换为unix系统的文件。
语句实现:find -iname "*" -exec dos2unix {} \;