zoukankan      html  css  js  c++  java
  • find过滤大小执行操作

    1. find查找大小

    find dir -type f # 仅查找文件

    find -size 文件大小
    例如
    find -type f -size 100k # 查找大小为100k的文件

    find -type f -size -20M # 查找小于20M(不含20M)的文件

    find -type f -size +1G # 查找大于1G(含1G)的文件

    find -type f -size +100k -size -211k # 查找文件大小在100k和210k之间的文件(-代表小于这个值,且不包含这个值。另大小仅支持整数)

    但是这里有个坑,文件大小单位转换!
    看下面这个文件
    [root@it-no b]# du -b iat0007ffdc@dx1755de9281b7513822.pcm 238720 iat0007ffdc@dx1755de9281b7513822.pcm [root@it-no b]# du -k iat0007ffdc@dx1755de9281b7513822.pcm 233 iat0007ffdc@dx1755de9281b7513822.pcm [root@it-no b]# du -m iat0007ffdc@dx1755de9281b7513822.pcm 1 iat0007ffdc@dx1755de9281b7513822.pcm
    用不同的单位展示的大小分别是
    b 238720 k 233 m 1

    从上面可以看出du命令单位转换遵从1024,多余的小数点位会被舍弃,不足1的取1。所以在查找时如果查找大小为1M的文件,上面的这个会被查找到
    [root@it-no a]# [root@it-no a]# find -type f -size -233k [root@it-no a]# find -type f -size 233k [root@it-no a]# find -type f -size +233k ./b/iat0007ffdc@dx1755de9281b7513822.pcm [root@it-no a]#
    而查找大于1M的文件却找不到它

    为了提高我们查找的准确性,我们吧查找单位缩小再来查询
    [root@it-no a]# find -type f -size -233k [root@it-no a]# find -type f -size 233k [root@it-no a]# find -type f -size +233k ./b/iat0007ffdc@dx1755de9281b7513822.pcm [root@it-no a]#
    可以发现只有查找大于233k能找到此文件,因为238720/1024=233.125 ......

    2. find查找后执行

    find dir -exec cmd {} ;
    find dir -exec cmd {} +

    例如查找结果如下:
    [root@it-no all]# find -type f -size +100k -size -200k -name *765* ./part_2/iat00076551@dx1755db772637513822.pcm ./part_2/iat000765ac@dx1755db699b67389822.pcm ./part_4/iat00070e3c@dx1755dc76527a491822.pcm ./part_4/iat00076546@dx1755dd11d7c7513822.pcm ./part_4/iat000765e9@dx1755dbe04b7a4bd822.pcm ./part_1/iat00076765@dx1755db33143a44e822.pcm ./part_3/iat000765fa@dx1755db004f37389822.pcm ./part_3/iat000765d4@dx1755dd1fa0ba491822.pcm [root@it-no all]#

    我们来执行看看; 和+的区别
    [root@it-no all]# [root@it-no all]# find -type f -size +100k -size -200k -name *765* -exec ls {} ; ./part_2/iat00076551@dx1755db772637513822.pcm ./part_2/iat000765ac@dx1755db699b67389822.pcm ./part_4/iat00070e3c@dx1755dc76527a491822.pcm ./part_4/iat00076546@dx1755dd11d7c7513822.pcm ./part_4/iat000765e9@dx1755dbe04b7a4bd822.pcm ./part_1/iat00076765@dx1755db33143a44e822.pcm ./part_3/iat000765fa@dx1755db004f37389822.pcm ./part_3/iat000765d4@dx1755dd1fa0ba491822.pcm [root@it-no all]# find -type f -size +100k -size -200k -name *765* -exec ls {} + ./part_1/iat00076765@dx1755db33143a44e822.pcm ./part_3/iat000765d4@dx1755dd1fa0ba491822.pcm ./part_4/iat00076546@dx1755dd11d7c7513822.pcm ./part_2/iat00076551@dx1755db772637513822.pcm ./part_3/iat000765fa@dx1755db004f37389822.pcm ./part_4/iat000765e9@dx1755dbe04b7a4bd822.pcm ./part_2/iat000765ac@dx1755db699b67389822.pcm ./part_4/iat00070e3c@dx1755dc76527a491822.pcm [root@it-no all]#

    可以看到;是对查找出来的文件逐个执行cmd,而+则是吧所有的查找结果一次性执行cmd。我们再看看下面的命令:
    [root@it-no all]# [root@it-no all]# find -type f -size +100k -size -200k -name *765* -exec echo {} ; ./part_2/iat00076551@dx1755db772637513822.pcm ./part_2/iat000765ac@dx1755db699b67389822.pcm ./part_4/iat00070e3c@dx1755dc76527a491822.pcm ./part_4/iat00076546@dx1755dd11d7c7513822.pcm ./part_4/iat000765e9@dx1755dbe04b7a4bd822.pcm ./part_1/iat00076765@dx1755db33143a44e822.pcm ./part_3/iat000765fa@dx1755db004f37389822.pcm ./part_3/iat000765d4@dx1755dd1fa0ba491822.pcm [root@it-no all]# [root@it-no all]# find -type f -size +100k -size -200k -name *765* -exec echo {} + ./part_2/iat00076551@dx1755db772637513822.pcm ./part_2/iat000765ac@dx1755db699b67389822.pcm ./part_4/iat00070e3c@dx1755dc76527a491822.pcm ./part_4/iat00076546@dx1755dd11d7c7513822.pcm ./part_4/iat000765e9@dx1755dbe04b7a4bd822.pcm ./part_1/iat00076765@dx1755db33143a44e822.pcm ./part_3/iat000765fa@dx1755db004f37389822.pcm ./part_3/iat000765d4@dx1755dd1fa0ba491822.pcm [root@it-no all]#

    这样是不是更明显了

    最后我们来说下,其实exec后面只有两种模式【+】和【;】而我们知道;在shell中代表的是语句的结束,是转义,那么;其实就是告诉我们的编译器这里的;并不是语句的分割,而是以【;】模式运行cmd
    补充下前面这句话的示例

  • 相关阅读:
    shell脚本中判断上一个命令是否执行成功
    nginx 414 Request-URI Too Large
    nginx 重写URL尾部斜杠
    Linux shell 日期,时间相关的命令
    shell脚本中自定义日志记录到文件
    scanf后面跟一个getchar
    1.Tarball软件make与makefile详解(还需要补充)
    <>和“”的区别
    malloc,calloc,realloc,alloc
    toString()方法细节
  • 原文地址:https://www.cnblogs.com/wjlv/p/14087102.html
Copyright © 2011-2022 走看看