如何在命令行中“查找”与另一个模式匹配的目录中的文件匹配模式?

How can I `find` files matching pattern within a directory matching another pattern from the command line?

假设我想在 /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 是不可接受的。

您在 -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

您可以像

一样使用-path标志
find /Path -path "/Path/bar*" -name "file_name*"

这让您可以在没有像

这样简单的通配符的情况下执行多个路径
find /PATH \( -path "/Path/bar*" -o -path "/Path/foo* \) -name "file_name*"