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

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

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

find . -name "*.jdk"

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

【问题讨论】:

    标签: macos unix search terminal


    【解决方案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'
            

            【讨论】:

              猜你喜欢
              • 2010-09-06
              • 2011-03-10
              • 2011-08-21
              • 2019-07-21
              • 1970-01-01
              • 1970-01-01
              • 2019-06-14
              • 1970-01-01
              相关资源
              最近更新 更多