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