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

Posted

技术标签:

【中文标题】在 Unix 中查找所有具有特定扩展名的文件?【英文标题】:Finding all files with certain extension in Unix? 【发布时间】:2012-01-26 07:57:17 【问题描述】:

我有一个文件/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home

我正在尝试查找我的硬盘驱动器上是否有 *.jdk。所以我做了一个搜索命令:

find . -name "*.jdk"

但它什么也没找到。甚至没有我知道我拥有的那个。怎么会?

【问题讨论】:

【参考方案1】:

find . 仅在您的当前目录中查找。如果您有权在其他目录中查找文件(root 访问权限),那么您可以使用以下命令查找您的文件 -

find / -type f -name "*.jdk"

如果您收到大量权限被拒绝消息,那么您可以通过这样做来抑制它

find / -type f -name "*.jdk" 2> /dev/null

【讨论】:

@Prostak,这只会显示常规文件,而不是目录。 -type f是过滤掉符号链接、目录、设备等。 我将此标记为正确答案。但是感谢你们俩的帮助!【参考方案2】:

一个/

find . 表示“查找(从当前目录开始)”。如果要搜索整个系统,请使用find /;在/System/Library下搜索,使用find /System/Library等。

b/

在通配符周围使用单引号更安全。如果运行时工作目录中没有名为 *.jdk 的文件,则find 将获得以下命令行:

    find . -name *.jdk

但是,如果您在运行时碰巧在 当前目录 中有文件 junk.jdkfoo.jdkfind 将改为以:

    find . -name junk.jdk foo.jdk

... 这会(因为有两个)混淆它,并导致它出错。如果您随后删除 foo.jdk 并再次执行完全相同的操作,您将拥有

    find . -name junk.jdk

...它永远不会找到名为(例如)1.6.0.jdk 的文件。

在这种情况下你可能想要的是

    find /System -name '*.jdk'

...或者,您可以将*“转义”为:

    find /System -name \*.jdk

【讨论】:

【参考方案3】:

可能您的 JDK 是大写的和/或 OS X 上可用的 find 版本不默认为 -print 如果未指定任何操作;试试:

find . -iname "*.jdk" -print

-iname 类似于 -name,但执行不区分大小写的匹配;-printfind 说以打印结果)

--- 编辑 ---

正如@Jaypal 所指出的,显然find . ... 仅查看当前目录(和子目录),如果要搜索整个驱动​​器,则必须指定/ 作为搜索路径。

【讨论】:

为什么一定要用-print,不是默认的吗? @giannischristofakis:刚刚检查了 POSIX 标准,是的,这是默认的;可能我明确写了它,因为我担心它是我习惯的 GNUism(例如,在 GNU 中,您也可以省略 .,而 BSD 中的 IIRC 发现它是必需的)。【参考方案4】:

'.'您正在使用的是当前目录。如果您从主目录开始,它可能会丢失 JDK 文件。

最坏情况的搜索是从根目录开始

 find / -name '*.jdk' -o -name '*.JDK' -print

否则,将“/”替换为您确定应该是 JDK 文件的父级的路径。

我希望这会有所帮助。

【讨论】:

【参考方案5】:

find / -type f -name "*.jdk" 也适用于 Mac

【讨论】:

【参考方案6】:

如果您在 Mac 终端上,并且已经在您想要进行搜索的目录中,那么这也可能适合您:

find *.pdf

至少它对我有用。

【讨论】:

【参考方案7】:

ls *.jpg |剪切 -f 1 -d "."

将“.jpg”替换为您想要列出的任何扩展名

【讨论】:

如果文件在子目录中怎么办?【参考方案8】:

这适用于我在 macOS 上。

find . -type f -iname '*.jdk'

【讨论】:

以上是关于在 Unix 中查找所有具有特定扩展名的文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何在Python中的目录中查找具有特定文件扩展名的所有文件

递归查找具有特定扩展名的文件

python 查找具有特定扩展名的目录中的所有文件

在文件夹中查找具有特定扩展名的文件

在所有子目录中查找具有特定扩展名的文件数

如何从数组中查找具有特定扩展名的文件列表