发布网友 发布时间:2022-04-10 08:51
共2个回答
热心网友 时间:2022-04-10 10:20
#!/bin/bash追答我用户目录下东西很多,所以我是在用户目录下建了个子目录,用子目录来试验的,我这里验证通过了。结果提示else附近有错,可能你的shell不支持continue命令,改一下脚本吧:
#!/bin/bash
tarname=usr.tar.gz
cd ~
rm $tarname 2>/dev/null
for info in *
do
file=`ls -l $info|grep -e ^-..*$`
if [ -n "$file" ]; then
fsize=`echo "$file"|awk '{print $5}'`
if [ $fsize -lt 5000 ]; then
fname=`echo "$file"|awk '{print $NF}'`
flist=$flist" "$fname
fi
fi
done
tar czf $tarname $flist
[ $? -eq 0 ] && echo "Done, archived to ~/$tarname!!"
exit 0
1、tar包是放在用户目录下的,所以每次运行脚本打包用户目录文件前需要先删除以前生成的tar包(如果不存在也不显示错误信息)。
2、^-..*$ 是正则表达式规则,表示以 - 开头的一行(如果是目录,则以 d 开头,你可以在用户目录下 ls -l 看一下)。. 表示任意一个字符,*表示匹配前面的0个或多个字符。你网上搜一下Linux shell正则表达式就知道了。
3、[ -n "$file" ] 这是测试语句,判断字符串是否非空。上面一步用grep过滤,若不符合正则表达式条件,则出来的file字符串可能为空。这里仅处理不为空的情况(符合条件的情况)。
4、对的。ls -l 出来的每行信息的第5个字段就是文件大小。
热心网友 时间:2022-04-10 11:38
楼上的这句 for info in * 会把用户目录下的子目录内的文件也找出来