【问题标题】:How can I `find` files matching pattern within a directory matching another pattern from the command line?如何在与命令行中的另一个模式匹配的目录中“查找”匹配模式的文件?
【发布时间】:2016-01-19 09:49:46
【问题描述】:

假设我想查找/Path 中名为file_name* 的所有文件。简单:

$ find /Path -name "file_name*"
/Path/foo1/file_name1.txt
/Path/foo2/file_name2.txt
/Path/bar3/file_name3.txt
/Path/bar4/file_name4.txt

如果我只想搜索bar 之类的子目录怎么办?

我可以通过管道传输结果,但这非常低效。

$ find /Path -name "file_name*" | grep "bar"
/Path/bar3/file_name3.txt
/Path/bar4/file_name4.txt

有没有办法将它们全部放在find 中并跳过搜索与bar 不匹配的目录?

注意:如果我专门搜索 /Path/bar3,结果会立即返回。但是,如果我只搜索/Path,然后在grep 中搜索bar,则需要30-60 秒。这就是为什么管道到grep 是不可接受的。

【问题讨论】:

    标签: linux command-line grep locate


    【解决方案1】:

    您在-name 参数中使用通配符,但您也可以在路径参数中使用它。

    find /Path/bar* -name "file_name*"
    

    我创建了以下测试目录:

    ./Path
    |-- bar
        `-- file_name123.txt
    |-- bar1
        `-- file_name234.txt
    |-- bar2
        `-- file_name345.txt
    |-- foo
        `-- file_name456.txt
    

    上面的命令给出:

    Path/bar/file_name123.txt
    Path/bar1/file_name234.txt
    Path/bar2/file_name345.txt
    

    【讨论】:

      【解决方案2】:

      您可以使用-path 标志,例如

      find /Path -path "/Path/bar*" -name "file_name*"
      

      这让您可以在没有像这样简单的通配符的情况下执行多个路径

      find /PATH \( -path "/Path/bar*" -o -path "/Path/foo* \) -name "file_name*"
      

      【讨论】:

        猜你喜欢
        • 2011-06-03
        • 2014-02-04
        • 1970-01-01
        • 2011-06-28
        • 1970-01-01
        • 1970-01-01
        • 2013-06-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多