【问题标题】:How to reduce a number of sequential find(1) invocations?如何减少顺序 find(1) 调用的次数?
【发布时间】:2015-08-21 11:34:53
【问题描述】:

我觉得这个 shell 脚本需要重构:

find -name *.java >> filelist.txt && find -name *.ftl >> filelist.txt && find -name *.xhtml >> filelist.txt && find -name *.html >> filelist.txt && find -name *.jrxml >> filelist.txt && find -name *.xml >> filelist.txt

它递归地搜索某些文件类型。 您将如何最小化此代码?

谢谢。

【问题讨论】:

    标签: bash shell find


    【解决方案1】:

    您可以将表达式与-o 标志结合起来,所以它变成:

    find -name '*.java' -o -name '*.xhtml' -o -name '*.jrxml'  >> filelist.txt
    

    对于您的其他文件类型,依此类推。 注意:引用通配符 '*.java' 而不是 *.java ,否则你 risk *.java 扩展为当前目录中的 .java 文件。

    【讨论】:

      【解决方案2】:

      如果filelist.txt 中文件名的顺序无关紧要,您可以像这样使用-o 运算符(意​​思是“或”):

      find -name "*.java" -o -name "*.ftl" ... >> filelist.txt
      

      请注意,这将更改filelist.txt 中文件的顺序,就像您的命令一样,所有*.java 文件将排在第一位,然后是所有*.ftl 文件,依此类推。

      【讨论】:

        【解决方案3】:

        试试这个命令:

        for a in *.java *.xhtml *.jrxml; do find -name ${a} >> ; done
        

        【讨论】:

        • 这并没有减少对find的调用次数;它只是使代码更紧凑。此外,你不能像你展示的那样有一个悬空的>> 运算符。
        猜你喜欢
        • 2020-09-07
        • 1970-01-01
        • 2012-08-22
        • 1970-01-01
        • 2018-09-06
        • 1970-01-01
        • 1970-01-01
        • 2014-07-12
        • 2019-11-26
        相关资源
        最近更新 更多