问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

编写一个shell脚本,自动将用户目录下所有小于5k的文件打包成tar.gz(提示需要配合ls和grep命令。)

发布网友 发布时间:2022-04-10 08:51

我来回答

2个回答

热心网友 时间:2022-04-10 10:20

#!/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}'`
else
continue
fi

if [ $fsize -lt 5000 ]; then
fname=`echo "$file"|awk '{print $NF}'`
flist=$flist" "$fname
fi
done

tar czf $tarname $flist
[ $? -eq 0 ] && echo "Done, archived to ~/$tarname!!"
exit 0

脚本不考虑子目录内容。追问你好,不知你有没有执行过,我执行的环境为RHEL5.6,结果提示else附近有错,我看不出错在哪。另外有几处不明之处
1、rm $tarname 2>/dev/null //意义和作用
2、file=`ls -l $info|grep -e ^-..*$` //这个 ^-..*$规则什么意思
3、if [ -n "$file" ] then //-n "$file" 是什么意思
4、fsize=`echo "$file"|awk '{print $5}'` //awk '{print $5}' 能找出文件大小?

追答我用户目录下东西很多,所以我是在用户目录下建了个子目录,用子目录来试验的,我这里验证通过了。结果提示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 * 会把用户目录下的子目录内的文件也找出来

下面我写的
#!/bin/bash
for filename in `ls -l $HOME |grep ^- |awk '{if($5<5120){print $NF}}'`
do
filelist="$filelist $filename"
done
tar cvfz usr.tar.gz $filelist

或者下面更简单的一条语句搞定:
ls -l $HOME |grep ^- |awk '{if($5<5120){print $NF}}' |xargs -i tar cvfz usr.tar.gz {}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
做鼻小柱用什么材料好? 谁有visio2003版 WIN7 64位啊,有的话发个连接 中山东区怎样坐车去珠海 ...忘记了ID密码,苹果官网发来一个这样的网址,请问怎么操作? 苹果id被锁定26天后可以重设密码 快手发作品配的说说大全 四年级语文爬山虎的脚教案 工作井内有哪些设备 南方电网检查井内设有排管吗 安装电缆施工 升和毫升内容 人一天要喝多少升水才算够 把2升水倒入500毫升的量杯,可以(  )杯. A、2 B、3 C、4 D、250 这个是陨石的一种吗 2000毫升水是多少加300克双皮奶加多少糖 这块陨石的形状不规则,请你设计一种测量这块陨石体积的办法 2000毫升的量杯是多少斤 小草网管软件在安装客户端或服务端的过程中,某些杀毒软件提示是病毒,怎么办? 小草打开后怎么无法链接 ? 有哪些有关种花花草草的app? 小草app注册邀请码格式 一颗草的图案是什么App 花草识别什么软件好用 小草app用wifi打不开 word文档不兼容打不开怎么办 北京冬奥会吉祥物冰墩墩一什么就受到了大家的喜爱? 钓鱼用蚯蚓和红虫哪个效果更好,为何,有经验的回答? 钓鱼红虫好还是蚯蚓好 钓鱼用红虫好还是蚯蚓好? 钓鱼用红虫好还是蚯蚓好 怎样才能在手机上预订火车票 我骂京东客服了,京东自营卖劣质产品,全网最低价其实就是拿劣质产品忽悠大家。 如何停止系统自动更新 手机火车票怎样订购, 在手机上怎样才能买火车票 怎样停止系统更新 京东上买的衣服贵200块钱卖家不给不差价,自己还不想退怎么办? 情人节哪些营销策略激发了哪些情绪? 什马金融逾期几天上征信 什马金融逾期上征信吗 Shell程序实现每天将主目录下的所有目录和文件归档 并压缩为文件mybackup.tar.gz然后让脚本开机自动运行? 什马金融逾期一天会不会影响征信 郑州六联钢结构工程有限公司怎么样? 郑州市钢结构工程有限公司 河南有哪些钢结构公司 郑州宝冶钢结构有限公司怎么样? 郑州市钢结构工程设计单位及联系方式 郑州中建兴成钢结构工程有限公司怎么样? 郑州东进钢结构工程有限公司怎么样? 郑州创设钢结构工程有限公司怎么样?