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

时间:2015-10-20 16:15:31

标签: linux command-line grep locate

说我想查找名为/Path的{​​{1}}中的所有文件。易:

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,则需要30-60秒。这就是bar的管道不可接受的原因。

2 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:2)

您可以使用-path标志,如

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

这使您可以在没有像

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