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

Rya*_*yan 4 linux command-line grep locate

假设我想查找/Pathnamed中的所有文件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
Run Code Online (Sandbox Code Playgroud)

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

我可以管理结果,但这非常低效.

$ find /Path -name "file_name*" | grep "bar"
/Path/bar3/file_name3.txt
/Path/bar4/file_name4.txt
Run Code Online (Sandbox Code Playgroud)

有没有办法让他们全部进入find并跳过搜索不匹配的目录bar

注意:如果我搜索/Path/bar3具体结果立即回来.但是,如果我只是搜索/Path,然后grepbar它需要30-60秒.这就是为什么grep不能接受管道.

car*_*ter 7

你在中使用通配符 -name参数中但也可以在path参数中使用它.

find /Path/bar* -name "file_name*"
Run Code Online (Sandbox Code Playgroud)

我创建了以下测试目录:

./Path
|-- bar
    `-- file_name123.txt
|-- bar1
    `-- file_name234.txt
|-- bar2
    `-- file_name345.txt
|-- foo
    `-- file_name456.txt
Run Code Online (Sandbox Code Playgroud)

上面的命令给出:

Path/bar/file_name123.txt
Path/bar1/file_name234.txt
Path/bar2/file_name345.txt
Run Code Online (Sandbox Code Playgroud)


Eri*_*ouf 7

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

find /Path -path "/Path/bar*" -name "file_name*"
Run Code Online (Sandbox Code Playgroud)

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

find /PATH \( -path "/Path/bar*" -o -path "/Path/foo* \) -name "file_name*"
Run Code Online (Sandbox Code Playgroud)