2015-10-20 219 views
3

说我想查找名为file_name*的所有/Path中的文件。 Easy:如何在命令行中匹配另一个模式的目录中找到匹配模式的文件?

$ 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

回答

5

-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

可以使用-path标志像

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

这可以让你在没有简单通配符的地方做多条路径,如

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