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

时间:2011-12-22 17:48:19

标签: macos unix search terminal

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

我试图找到我的硬盘上的其他地方是否有* .jdk。所以我做了一个搜索命令:

find . -name "*.jdk"

但它找不到任何东西。甚至不是我认识的那个人。怎么会?

8 个答案:

答案 0 :(得分:94)

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

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

如果您获得了大量权限被拒绝的消息,那么您可以通过执行

来抑制这些消息
find / -type f -name "*.jdk" 2> /dev/null

答案 1 :(得分:10)

a /

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

B /

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

    find . -name *.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

答案 2 :(得分:6)

如果没有指定操作,可能你的JDK是大写的和/或OS X上可用的find版本默认为-print;尝试:

find . -iname "*.jdk" -print

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

---编辑---

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

答案 3 :(得分:2)

'。'您正在使用的是当前目录。如果你是在你的家庭目录开始,它可能会错过JDK文件。

最糟糕的案例搜索是从root开始的

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

否则将'/'替换为您确定应该是JDK文件的父路径的某个路径。

我希望这会有所帮助。

答案 4 :(得分:1)

如果您使用的是 Mac 终端,并且已经在您希望进行搜索的目录中,那么这也可能对您有用:

find *.pdf

至少对我有用。

答案 5 :(得分:0)

查找/ -type f -name“ * .jdk”也可以在Mac上运行

答案 6 :(得分:0)

ls * .jpg |切-f 1 -d“。”

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

答案 7 :(得分:0)

这在 macOS 上对我有用。

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