我有一个文件/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
我试图找到我的硬盘上的其他地方是否有* .jdk。所以我做了一个搜索命令:
find . -name "*.jdk"
但它没有找到任何东西。甚至不是我认识的那个人。怎么会?
find .
只在您当前的目录中查找。如果您有权在其他目录中查找文件(root访问权限),那么您可以使用以下命令查找文件 -
find / -type f -name "*.jdk"
如果您获得了大量权限被拒绝的消息,那么您可以通过执行来抑制这些消息
find / -type f -name "*.jdk" 2> /dev/null
一个/
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
可能你的JDK是大写的和/或OS X上可用的find
版本如果没有指定动作则不会默认为-print
;尝试:
find . -iname "*.jdk" -print
(-iname
就像-name
但是执行不区分大小写的匹配; -print
对find
说打印结果)
---编辑---
正如@Jaypal所指出的那样,显然find .
...只查看当前目录(和子目录),如果要搜索整个驱动器,则必须将/
指定为搜索路径。
'。'您正在使用的是当前目录。如果你是在你的家庭目录开始,它可能会错过JDK文件。
最糟糕的案例搜索是从root开始
find / -name '*.jdk' -o -name '*.JDK' -print
否则将'/'替换为您确定应该是JDK文件的父路径的路径。
我希望这有帮助。
find / -type f -name“* .jdk”也适用于Mac