我有一个文件/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
我想查找我的硬盘上是否有其他地方也安装了*.jdk,于是我执行了搜索命令:
find . -name "*.jdk"
但是它什么都找不到,甚至我知道已经存在的那一个也没有。为什么会这样呢?
find .
只会在当前目录下查找文件。如果你有权限在其他目录(如 root 权限)中查找文件,可以使用以下命令查找你要找的文件:
find / -type f -name "*.jdk"
如果你收到很多"permission denied"(权限被拒绝)的消息,你可以通过以下方式抑制它:
find / -type f -name "*.jdk" 2> /dev/null
a/
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 .
...只查找当前目录(和子目录),如果您想搜索整个驱动器,则必须指定/
作为搜索路径。
find / -name '*.jdk' -o -name '*.JDK' -print
find *.pdf
至少对我而言它起作用了。
在Mac上也可以使用“find / -type f -name“*.jdk””命令。
这对我在 macOS 上有效。
find . -type f -iname '*.jdk'
ls *.jpg | cut -f 1 -d "."
将“.jpg”替换为您想要列出的任何扩展名
-type f
是为了过滤掉符号链接、目录、设备等其他类型的文件。 - BRPocock2> /dev/null
这部分是如何工作的? - Daniel Apt2>
将错误消息重定向到“其他地方”,而正常输出 (1>
) 仍然会打印到终端。 - undefined