在Unix中查找具有特定扩展名的所有文件?

问题描述:

我有一个文件/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 
+3

@Prostak,这只会显示常规文件,而不是目录。 '-type f'用于过滤符号链接,目录,设备等。 – BRFennPocock 2011-12-22 18:19:14

+0

我正在将此标记为正确答案。但是,感谢你们两位的帮助! – Prostak 2011-12-22 19:13:41

如果未指定任何操作,则可能您的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

'。'你正在使用的是当前目录。如果您从家庭目录开始,它可能会丢失JDK文件。

最坏情况搜索从根与一些路径,你一定应该是父母给你的JDK文件开始

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

否则取代“/”。

我希望这会有所帮助。

一个/

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