繁体   English   中英

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

[英]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.jdkfoo.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM