2014-12-27 84 views
0

我的問題很簡單,我無法在谷歌找到答案:發現 - 通配符路徑搜索

find *h 

find *g 

或任何其他字符如下:爲什麼如果我鍵入 明星,結果是當前和子目錄中的所有文件? 同樣的結果也是爲

find * 

這是顯而易見的。我猜星星(*)在這裏作爲開始搜索的目錄,而不是搜索的文件模式。所以*擴展爲'當前目錄中的所有目錄'。因此,在這種情況下,它將搜索所有目錄並查找所有文件,這是預期的行爲。但爲什麼如果我提供作爲目錄開始搜索'* g'它也可以找到所有文件?即使沒有以'g'開頭的單個目錄?

+0

這應該張貼在unix.stackexchange.com上。 – Barmar 2014-12-27 20:25:59

+0

通配符由shell擴展。因此它成爲起點的列表。 – Barmar 2014-12-27 20:26:26

+0

輸入'echo * h'或'echo * g'。你會看到shell擴展了通配符。這些文件名成爲'find'的起點列表。 – Barmar 2014-12-27 20:27:59

回答

0

你所描述的不是它是如何工作的。 *g由shell擴展到當前目錄中以g結尾的所有文件和目錄,然後find作用於該列表。

正如@Barmar在評論中指出的那樣,您所描述的聽起來像您在shell中設置的*gnullglob選項上沒有匹配項,這會導致沒有匹配項的通配符表達式展開爲空字符串。 (默認行爲是將其展開,這會導致從find發生錯誤消息。)

+0

是的,但問題是沒有以'g'結尾的目錄,即使命令列出所有子目錄中的所有文件,都是從我的控制檯中得到的:'./log_05.txt ./Asad.cpp ./dir3 ./dir3/asd3.cpp ./dir3/asd2.cpp ./dir3/asd1.cpp ./dir3/dir_nested ./asd.cpp ./log_02.txt ./log_06.txt 。 /log_01.txt ' – friko 2014-12-27 21:03:52

+0

@Barmar更新了您的觀察結果;謝謝! – tripleee 2014-12-28 06:36:47