【发布时间】:2012-01-26 07:57:17
【问题描述】:
我有一个文件/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
我正在尝试查找我的硬盘驱动器上是否有 *.jdk。所以我做了一个搜索命令:
find . -name "*.jdk"
但它什么也没找到。甚至没有我知道我拥有的那个。怎么会?
【问题讨论】:
标签: macos unix search terminal
我有一个文件/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
我正在尝试查找我的硬盘驱动器上是否有 *.jdk。所以我做了一个搜索命令:
find . -name "*.jdk"
但它什么也没找到。甚至没有我知道我拥有的那个。怎么会?
【问题讨论】:
标签: macos unix search terminal
find . 仅在您的当前目录中查找。如果您有权在其他目录中查找文件(root 访问权限),那么您可以使用以下命令查找您的文件 -
find / -type f -name "*.jdk"
如果您收到大量权限被拒绝消息,那么您可以通过这样做来抑制它
find / -type f -name "*.jdk" 2> /dev/null
【讨论】:
-type f是过滤掉符号链接、目录、设备等。
一个/
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 . ... 仅查看当前目录(和子目录),如果要搜索整个驱动器,则必须指定/ 作为搜索路径。
【讨论】:
-print,不是默认的吗?
.,而 BSD 中的 IIRC 发现它是必需的)。
'.'您正在使用的是当前目录。如果您从主目录开始,它可能会丢失 JDK 文件。
最坏情况的搜索是从根目录开始
find / -name '*.jdk' -o -name '*.JDK' -print
否则,将“/”替换为您确定应该是 JDK 文件的父级的路径。
我希望这会有所帮助。
【讨论】:
find / -type f -name "*.jdk" 也适用于 Mac
【讨论】:
如果您在 Mac 终端上,并且已经在您想要进行搜索的目录中,那么这也可能适合您:
find *.pdf
至少它对我有用。
【讨论】:
ls *.jpg |剪切 -f 1 -d "."
将“.jpg”替换为您想要列出的任何扩展名
【讨论】:
这适用于我在 macOS 上。
find . -type f -iname '*.jdk'
【讨论】: