我有一個文件/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
在Unix中查找具有特定擴展名的所有文件?
我試圖找到我的硬盤上是否有* .jdk。所以我做一個搜索命令:
find . -name "*.jdk"
但是沒有找到任何東西。甚至連我所知道的我都沒有。怎麼來的?
我有一個文件/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
在Unix中查找具有特定擴展名的所有文件?
我試圖找到我的硬盤上是否有* .jdk。所以我做一個搜索命令:
find . -name "*.jdk"
但是沒有找到任何東西。甚至連我所知道的我都沒有。怎麼來的?
find .
只會在當前目錄中顯示。如果您有權尋找在其他目錄中的文件(root訪問),那麼你可以使用以下方法來找到你的文件 -
find/-type f -name "*.jdk"
如果您收到噸權限的否認消息,則可以抑制做
find/-type f -name "*.jdk" 2> /dev/null
如果未指定任何操作,則可能您的JDK爲大寫,並且/或者OS X上可用的find
版本未默認爲-print
;嘗試:
find . -iname "*.jdk" -print
(-iname
就像-name
但執行不區分大小寫的匹配; -print
說要find
打印出結果)
---編輯---
正如指出的@Jaypal,顯然是find .
......只能查看當前目錄(和子目錄),如果要搜索整個驅動器,則必須指定/
作爲搜索路徑。
爲什麼你必須使用'-print',ISN」默認? – 2014-12-09 10:16:22
@giannischristofakis:剛剛檢查了POSIX標準,是的,這是默認的;可能是我明確地寫了它,因爲我擔心它是我習慣的GNUism(例如,在GNU中發現你也可以省略'.',而在BSD中IIRC發現它是必需的)。 – 2014-12-09 10:31:24
'。'你正在使用的是當前目錄。如果您從家庭目錄開始,它可能會丟失JDK文件。
最壞情況搜索從根與一些路徑,你一定應該是父母給你的JDK文件開始
find/-name '*.jdk' -o -name '*.JDK' -print
否則取代「/」。
我希望這會有所幫助。
一個/
find .
手段, 「找到(在當前目錄中開始)」。如果要搜索整個系統,請使用find /
; /System/Library
下進行搜索,使用find /System/Library
等
B/
它的安全使用通配符左右單引號。如果沒有名爲*的文件。JDK在工作目錄,當你運行它,然後find
將得到的命令行:
find . -name *.jdk
但是,如果你碰巧有文件在當前目錄junk.jdk
和foo.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
@Prostak,這隻會顯示常規文件,而不是目錄。 '-type f'用於過濾符號鏈接,目錄,設備等。 – BRFennPocock 2011-12-22 18:19:14
我正在將此標記爲正確答案。但是,感謝你們兩位的幫助! – Prostak 2011-12-22 19:13:41