需求:
有一批压缩包,需要查看包(zip,rar)内文件后缀,并获取包内文件大小,写入文件,如下图
[root@zip1 ]# zipinfo ooopic_23903798_8d58a493108e597327a5.zip
Archive: ooopic_23903798_8d58a493108e597327a5.zip 3997775 2
-rw-a-- 3.1 fat 9941034 bx defN 18-Oct-18 03:06 �+��FunX+�+�.3dm
-rw-r--r-- 3.0 unx 50145 bx defN 28-Jul-20 08:51 关注有奖.jpg
2 files, 9991179 bytes uncompressed, 3997387 bytes compressed: 60.0%
测试命令,包内文件可能有多个不能只取第二,第三行
[root@zip1 ]# zipinfo ooopic_23903798_8d58a493108e597327a5.zip|egrep -v "bytes"|awk 'NR!=1{print $4,$NF}'|awk -F'.' '{print $1,$NF}'|awk '{print $1,$3}'
1410385 3dm
50145 jpg
备注:
#awk 'NR!=1 去掉第一行
脚本批量操作,
#set -x
dest=/data/zipinfo/
while read id file
do
if [ -f ${dest}${file} ];then
right=${file##*.} #获取文件后缀
if [ "$right" == "zip" ];then
zip_info=`zipinfo ${dest}${file}|egrep -v "bytes"|awk 'NR!=1{print $4,$NF}'|awk -F'.' '{print $1,$NF}'|awk '{print $1,$3}'`
echo $id $file $zip_info >>zip_info.txt
elif [ "$right" == "rar" ];then
rar_info=`unrar l $file |awk 'NR>8{print $0}'|egrep -v '^-'|awk '{print line}{line=$0}'|awk 'NR>2{print line}{line=$0}'|awk '{print $2,$NF}' |awk -F'.' '{print $1,$NF}'|awk '{print $1,$NF}'`
echo $id $file $rar_info >>rar_info.txt
fi
else
echo $id $file >>fail.txt
fi
done<1.txt
备注:
#awk '{print line}{line=$0}' 去掉最后一行
最终结果满足需求
[root@zip1 ]# head -2 zipinfo_succ.txt
111111 ooopic_23903691_8db3e796dfb1d7bc4428.rar 8799462 3dm 50145 jpg
222222 ooopic_23903797_3490ddef9d19b3dd2121.zip 20353059 3dm 50145 jpg