![](/img/trans.png)
[英]Command to open all files with a specified extension the current folder using Unix Terminal?
[英]Finding all files with certain extension in Unix?
我有一个文件/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
等。
乙/
在通配符周围使用单引号更安全。 如果运行此命令时工作目录中没有名为 *.jdk 的文件,则find
将获得以下命令行:
find . -name *.jdk
但是,如果您在运行它时foo.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
如果您在 Mac 终端上,并且已经在您想要进行搜索的目录中,那么这也可能对您有用:
find *.pdf
至少它对我有用。
ls *.jpg | cut -f 1 -d "."
将“.jpg”分出到您要列出的任何扩展名
这在 macOS 上对我有用。
find . -type f -iname '*.jdk'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.