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

我有一个文件/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home

我试图find我的硬盘上的其他地方是否有* .jdk。 所以我做一个search命令:

 find . -name "*.jdk" 

但它没有find任何东西。 甚至连我所知道的我都没有。 怎么来的?

find . 只能看到你的当前目录。 如果您有权限查找其他目录中的文件(root访问权限),那么您可以使用以下命令查找您的文件 –

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

如果您正在获取吨权限被拒绝的消息,那么你可以通过这样做来压制

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

一个/

find . 意思是“查找(从当前目录开始)”。 如果你想search整个系统,使用find / ; 在/System/Library下search,使用find /System/Library等。

b /

在通配符周围使用单引号更安全。 如果在运行时没有在工作目录中命名为* .jdk的文件,则会find命令行:

  find . -name *.jdk 

但是,如果您在运行时foo.jdk当前目录中存在junk.jdkfoo.jdk文件, foo.jdk find内容:

  find . -name junk.jdk foo.jdk 

…将会(因为有两个)混淆,导致错误。 如果你然后删除foo.jdk并再次做同样的事情,你会有

  find . -name junk.jdk 

…永远不会find一个文件(例如) 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 . …仅查看当前目录(和子目录),如果要search整个驱动​​器,则必须指定/作为searchpath。

'。' 你正在使用的是当前目录。 如果你是在你的家目录开始,它可能会错过JDK文件。

最糟糕的情况是从根开始search

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

否则用你确定的pathreplace'/'应该是你的JDK文件的父path。

我希望这有帮助。