大致思路:循环遍历该文件夹下所有文件,正则匹配出最大编码文件;然后循环文件,删除除最大编码外的文件。
实现代码如下:
#!/bin/bash function getdir(){ max=0 DATEPATTERN="^[0-9]*$" for element in `ls $1` do if [[ "$element" =~ $DATEPATTERN ]] then if [ `expr $max - $element` -lt 0 ] then max=$element fi fi done for element in `ls $1` do if [[ "$element" =~ $DATEPATTERN ]] then if [ $max != $element ] then rm -rf element fi fi done } root_dir="/root/cloud/builds" getdir $root_dir
实现效果:文件夹:/root/cloud/builds
执行脚本后:
用到的Shell基本知识 1. 变量shell脚本的变量声明通过“=”进行赋值,与C++或java不同,变量名、值与等号不能有空格,否则无法识别该变量。如
var=10
var1="qwert"
var2='qwert'
echo $var #输出 10
echo $var1 #输出 qwert
echo $var2 #输出 qwert
获取变量中的值,采用“$变量名”格式。
2. 字符串声明字符串可以采用双引号或单引号,但两者有一些区别
单引号:1. 单引号中的字符会原样输出,其中的变量不起作用; 2. 单引号中不能使用转义字符,会报错;
双引号:1. 可以包含变量并取值;2. 可以包含转义字符
#!/bin/bash a=10 val='hello world $a' echo "单引号:"$val val='hello 'world' $a' echo "单引号+单引号 = 拼接:"$val #val='hello \'world\' $a' #echo $val #报错:/usercode/file.sh: line 9: unexpected EOF while looking for matching `'' val="hello 'world' $a" echo "双引号+单引号 = 输出单引号:"$val val="hello "world" $a" echo "双引号+双引号 = 拼接:"$val val="hello \"world\" $a" echo "双引号+双引号转义字符 = 输出双引号:"$val val="hello "$a"world" echo "双引号+变量 = 拼接:"$val
输出结果:
单引号:hello world $a 单引号+单引号 = 拼接:hello world $a 双引号+单引号 = 输出单引号:hello 'world' 10 双引号+双引号 = 拼接:hello world 10 双引号+双引号转义字符 = 输出双引号:hello "world" 10 双引号+变量 = 拼接:hello 10world
字符串拼接问题
(1)字符串拼接赋值给变量:双引号或者单引号拼接的时候,如果子字符串完全为纯字符串,之间可以有空格;如果存在变量,则变量与字符串之间不可以有空格;
(2)字符串拼接echo输出:可以有空格。如echo "hello" $a 'world' 输出:hello 10 world
3. 传递参数脚本函数获取参数的格式为:$n,n表示第n个参数,如$1表示获取第一个参数,$2表示获取第二个参数。。。。$0表示获取执行脚本名
4. 基本运算原生的bash不能进行简单的数学计算,可以通过命令实现,如awk或expr。
本文中运用到的计算包括:减法计算、不等判断、小于判断,如[ `expr $max - $element` -lt 0 ]、[ $max != $element ]
5. 流程控制(1)条件判断: