2015-10-20 214 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*"