2011-12-22 187 views
36

我有一個文件/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home在Unix中查找具有特定擴展名的所有文件?

我試圖找到我的硬盤上是否有* .jdk。所以我做一個搜索命令:

find . -name "*.jdk" 

但是沒有找到任何東西。甚至連我所知道的我都沒有。怎麼來的?

回答

70

find .只會在當前目錄中顯示。如果您有權尋找在其他目錄中的文件(root訪問),那麼你可以使用以下方法來找到你的文件 -

find/-type f -name "*.jdk" 

如果您收到噸權限的否認消息,則可以抑制做

find/-type f -name "*.jdk" 2> /dev/null 
+3

@Prostak,這隻會顯示常規文件,而不是目錄。 '-type f'用於過濾符號鏈接,目錄,設備等。 – BRFennPocock 2011-12-22 18:19:14

+0

我正在將此標記爲正確答案。但是,感謝你們兩位的幫助! – Prostak 2011-12-22 19:13:41

4

如果未指定任何操作,則可能您的JDK爲大寫,並且/或者OS X上可用的find版本未默認爲-print;嘗試:

find . -iname "*.jdk" -print 

-iname就像-name但執行不區分大小寫的匹配; -print說要find打印出結果)

---編輯---

正如指出的@Jaypal,顯然是find . ......只能查看當前目錄(和子目錄),如果要搜索整個驅動​​器,則必須指定/作爲搜索路徑。

+1

爲什麼你必須使用'-print',ISN」默認? – 2014-12-09 10:16:22

+1

@giannischristofakis:剛剛檢查了POSIX標準,是的,這是默認的;可能是我明確地寫了它,因爲我擔心它是我習慣的GNUism(例如,在GNU中發現你也可以省略'.',而在BSD中IIRC發現它是必需的)。 – 2014-12-09 10:31:24

2

'。'你正在使用的是當前目錄。如果您從家庭目錄開始,它可能會丟失JDK文件。

最壞情況搜索從根與一些路徑,你一定應該是父母給你的JDK文件開始

find/-name '*.jdk' -o -name '*.JDK' -print 

否則取代「/」。

我希望這會有所幫助。

8

一個/

find .手段, 「找到(在當前目錄中開始)」。如果要搜索整個系統,請使用find /; /System/Library下進行搜索,使用find /System/Library

B/

它的安全使用通配符左右單引號。如果沒有名爲*的文件。JDK在工作目錄,當你運行它,然後find將得到的命令行:

find . -name *.jdk 

但是,如果你碰巧有文件在當前目錄junk.jdkfoo.jdk當你運行它, find將改爲與啓動:

find . -name junk.jdk foo.jdk 

...這將(因爲有兩個)混淆,並導致其錯誤的。如果然後刪除foo.jdk並再次做同樣的事情,你必須

find . -name junk.jdk 

...這將永遠不會找到一個名爲(例如)1.6.0.jdk文件。

你可能希望在這方面有什麼,是

find /System -name '*.jdk' 

...或者,你可以 「越獄」 的*爲:

find /System -name \*.jdk 
相關問題