如何在命令行中匹配另一个模式的目录中找到匹配模式的文件?
问题描述:
说我想查找名为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
。
答
在-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*"