分页: 1 / 2

紧急求助 如何获得一个目录下所有.apk结尾的文件的大小。如果都小于某个值就返回0,有1个大于参考值就返回1

发表于 : 2012-10-15 12:30
hhht
在一个特定目录下,有多个.apk结尾的文件,现在有个参考值比如20M.
如果给目录下所有的.apk文件都小于参考值20M 则 exit 0,只要有一个文件大于参考值则返回1.
同时输出每个文件的大小。

Re: 紧急求助 如何获得一个目录下所有.apk结尾的文件的大小。如果都小于某个值就返回0,有1个大于参考值就返回1

发表于 : 2012-10-15 12:39
YeLee
用find啊,够简单了吧。

Re: 紧急求助 如何获得一个目录下所有.apk结尾的文件的大小。如果都小于某个值就返回0,有1个大于参考值就返回1

发表于 : 2012-10-15 12:45
hhht
YeLee 写了:用find啊,够简单了吧。
怎么用? find 只能检索出该路径下的所欲.apk文件吧? 我需要一个个的得出他们的大小,并且和一个参考值50M 比较大小。当路径下所有的包大小都小于参考值返回0, 只要有一个大于就返回1.

原来路径下只有一个包时,可以通过我写的脚本实现

#!/bin/sh
apkStadSize=51400
apkPath="../TestBaseDemo/bin/MainActivity-debug.apk"
chmod 777 ${apkPath}
apkSize=`du ${apkPath}| awk '{print $1}'`

if [ ${apkSize} -le ${apkStadSize} ] ; then
exit 0
else
exit 1
fi


现在路径下会有多个.apk包

Re: 紧急求助 如何获得一个目录下所有.apk结尾的文件的大小。如果都小于某个值就返回0,有1个大于参考值就返回1

发表于 : 2012-10-15 12:48
枫叶饭团
先把find的文档看完再说

Re: 紧急求助 如何获得一个目录下所有.apk结尾的文件的大小。如果都小于某个值就返回0,有1个大于参考值就返回1

发表于 : 2012-10-15 12:51
YeLee
find这不是有size么…… :em20

Re: 紧急求助 如何获得一个目录下所有.apk结尾的文件的大小。如果都小于某个值就返回0,有1个大于参考值就返回1

发表于 : 2012-10-15 13:01
hhht
YeLee 写了:find这不是有size么…… :em20
下午急着用,各位大虾能否先给个可用的脚本?

我今天用完再仔细研究。

谢谢

Re: 紧急求助 如何获得一个目录下所有.apk结尾的文件的大小。如果都小于某个值就返回0,有1个大于参考值就返回1

发表于 : 2012-10-15 14:10
YeLee

代码: 全选

find -iname "*.mkv"  -size +1G
:em01 :em01 :em01

Re: 紧急求助 如何获得一个目录下所有.apk结尾的文件的大小。如果都小于某个值就返回0,有1个大于参考值就返回1

发表于 : 2012-10-15 14:17
hhht
YeLee 写了:

代码: 全选

find -iname "*.mkv"  -size +1G
:em01 :em01 :em01
find -iname "*.apk" -size 51400 和 find -iname "*.apk" -size 51400 //和参考值50M比较
cat 'find -iname "*.apk" -size 51400'都没反应

Re: 紧急求助 如何获得一个目录下所有.apk结尾的文件的大小。如果都小于某个值就返回0,有1个大于参考值就返回1

发表于 : 2012-10-15 14:19
YeLee
前面加个加号啊…… :em20 :em20 :em20

Re: 紧急求助 如何获得一个目录下所有.apk结尾的文件的大小。如果都小于某个值就返回0,有1个大于参考值就返回1

发表于 : 2012-10-16 10:28
hhht
YeLee 写了:前面加个加号啊…… :em20 :em20 :em20
谢谢,试了下效果如下:
xb@renren:~/shellLearning/a$ find -iname "*.apk" -size +10
./CpuMemoryTest.apk
./Main-debug-unaligned.apk

我最后改成自己写函数来处理了,不过还遗留一个问题,就是不能显示出每个大小超标apk文件的信息

代码: 全选

#!/bin/bash

# 脚本必须返回一个值才行,所以最后需要用exit返回值

checkApk() #判断单个apk的大小
{
    apkStadSize=51400 #50M
    apkName=$1
    # chmod 777 ${apkPath}
    apkSize=`du ${apkName} | awk '{print $1}'`  #此句得到某个文件的大小信息
    #echo "${apkSize}" #此处想显示每个大小超标文件的文件名和大小信息,但加了此句下面函数调用会出错 :(,

    if [ ${apkSize} -le ${apkStadSize} ] ; then
        echo 0
    else
        echo 1
    fi
}


# apkPath="/Users/work/bvt-android/workspace/TestBaseDemo/bin"
apkPath="/home/xb/shellLearning/a"
chmod 777 ${apkPath}
value="1"
for a in `ls ${apkPath}/*.apk`
do
 #checkApkSize.sh $a
 #rec=`checkApk $a`
    echo "${a}"
    result=`checkApk ${a}`
    if [ ${result} -eq ${value} ] ; then
    #echo hahahah.$result
    exit ${result}
       #echo "aaa"
    #else
       #echo "bbb"
    fi
done
exit 0 





Re: 紧急求助 如何获得一个目录下所有.apk结尾的文件的大小。如果都小于某个值就返回0,有1个大于参考值就返回1

发表于 : 2012-10-16 11:26
YeLee
find不是能exec吗?不行的话,再扔给xargs处理也可以吧。 :em04 :em04 :em04

Re: 紧急求助 如何获得一个目录下所有.apk结尾的文件的大小。如果都小于某个值就返回0,有1个大于参考值就返回1

发表于 : 2012-10-16 17:41
hhht

代码: 全选

find -iname "*.apk" -size  +10|ls -l -k |awk '{print $9" size is: " $5"KB" } ' #找出当前目录下打大于10byte的文件。 同时输出文件名和大小
这句可以代替我上面代码中的函数。接下来接续解决怎么在调用该语句时不输出错误,同时根据条件exit 0 或者exit 1

实际效果如下:

不知怎的明明时前面过滤出了apk包,然后通过管道进行了ls -l, 结果ls -l把路径下所有的包都处理了

xb@renren:~/shellLearning/a$ ls
13.apk   13.sh   1.apk   CpuMemoryTest.apk         s.apk   Untitled Document
13.apk~  13.sh~  1.apk~  Main-debug-unaligned.apk  s.apk~  Untitled Document~
xb@renren:~/shellLearning/a$ ls
13.apk  1.apk   CpuMemoryTest.apk         s.apk
13.sh   1.apk~  Main-debug-unaligned.apk  Untitled Document
xb@renren:~/shellLearning/a$ find -iname "*.apk" -size  +10|ls -l -k |awk '{print $9" size is: " $5"KB" }'
 size is: KB #多输出了这行。没看明白怎出的错
13.apk size is: 1KB
13.sh size is: 1KB
1.apk size is: 1KB
1.apk~ size is: 0KB
CpuMemoryTest.apk size is: 43KB
Main-debug-unaligned.apk size is: 38KB
s.apk size is: 1KB
Untitled size is: 1KB
xb@renren:~/shellLearning/a$ 



Re: 紧急求助 如何获得一个目录下所有.apk结尾的文件的大小。如果都小于某个值就返回0,有1个大于参考值就返回1

发表于 : 2012-10-16 17:43
YeLee
赋值检查输出啊,假如字串是空就是找不到,非空就是找到了。 :em04 :em04 :em04

Re: 紧急求助 如何获得一个目录下所有.apk结尾的文件的大小。如果都小于某个值就返回0,有1个大于参考值就返回1

发表于 : 2012-10-16 17:54
hhht
hhht 写了:

代码: 全选

find -iname "*.apk" -size  +10|ls -l -k |awk '{print $9" size is: " $5"KB" } ' #找出当前目录下打大于10byte的文件。 同时输出文件名和大小
这句可以代替我上面代码中的函数。接下来接续解决怎么在调用该语句时不输出错误,同时根据条件exit 0 或者exit 1

实际效果如下:

不知怎的明明时前面过滤出了apk包,然后通过管道进行了ls -l, 结果ls -l把路径下所有的包都处理了

xb@renren:~/shellLearning/a$ ls
13.apk   13.sh   1.apk   CpuMemoryTest.apk         s.apk   Untitled Document
13.apk~  13.sh~  1.apk~  Main-debug-unaligned.apk  s.apk~  Untitled Document~
xb@renren:~/shellLearning/a$ ls
13.apk  1.apk   CpuMemoryTest.apk         s.apk
13.sh   1.apk~  Main-debug-unaligned.apk  Untitled Document
xb@renren:~/shellLearning/a$ find -iname "*.apk" -size  +10|ls -l -k |awk '{print $9" size is: " $5"KB" }'
 size is: KB #多输出了这行。没看明白怎出的错
13.apk size is: 1KB
13.sh size is: 1KB
1.apk size is: 1KB
1.apk~ size is: 0KB
CpuMemoryTest.apk size is: 43KB
Main-debug-unaligned.apk size is: 38KB
s.apk size is: 1KB
Untitled size is: 1KB
xb@renren:~/shellLearning/a$ 


代码: 全选

过滤输出结局了,加了xargs。效果如下:

xb@renren:~/shellLearning/a$ find -iname "*.apk" -size  +10|xargs ls -l -k |awk '{print $9" size is: " $5"KB" }'
./CpuMemoryTest.apk size is: 43KB
./Main-debug-unaligned.apk size is: 38KB

接下来继续把前面的./处理掉。一点一点进步。嘿嘿
过滤输出解决了,

Re: 紧急求助 如何获得一个目录下所有.apk结尾的文件的大小。如果都小于某个值就返回0,有1个大于参考值就返回1

发表于 : 2012-10-16 17:58
eexpress
● type find-opera-1M
find-opera-1M 是 `find ~/.opera/cache*/ -iname "opr*.tmp" -cmin -60 -size +1000k -printf "------\t%p\t► %Cr\t► %kK\t►" -exec file -b {} \;' 的别名

find 带的printf 多强。何必awk。。。