在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.jdk
和foo.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。
我希望这有帮助。