Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos 在Unix中查找具有特定扩展名的所有文件?_Macos_Unix_Search_Terminal - Fatal编程技术网

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

Macos 在Unix中查找具有特定扩展名的所有文件?,macos,unix,search,terminal,Macos,Unix,Search,Terminal,我有一个文件/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home 我正在尝试查找硬盘上是否有*.jdk。因此,我执行一个搜索命令: find . -name "*.jdk" 但它什么也没找到。甚至连我知道的那个也没有。为什么 可能您的JDK是大写的,并且/或者如果没有指定操作,OS X上可用的find版本不会默认为-print;尝试: find . -iname "*.jdk" -print (-iname与-nam

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

我正在尝试查找硬盘上是否有*.jdk。因此,我执行一个搜索命令:

find . -name "*.jdk"

但它什么也没找到。甚至连我知道的那个也没有。为什么

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

find . -iname "*.jdk" -print
-iname
-name
类似,但执行不区分大小写的匹配;
-print
表示查找以打印结果)

---编辑---


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

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

find / -type f -name "*.jdk"
如果您收到大量被拒绝权限的消息,那么您可以通过执行以下操作来抑制这些消息

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

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

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

 find / -name '*.jdk' -o -name '*.JDK' -print
否则,将“/”替换为您确定的JDK文件的父路径

我希望这能有所帮助。

a/

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

b/

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

    find . -name *.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
find/-typef-name“*.jdk”也适用于Mac

ls*.jpg | cut-f1-d”


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

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

find *.pdf

至少它对我有用。

@Prostak,这将只显示常规文件,而不是目录<代码>-类型f用于过滤符号链接、目录、设备等。我将此标记为正确答案。但是谢谢你们两位的帮助!为什么必须使用
-print
,这不是默认值吗?@giannischristofakis:刚刚检查了POSIX标准,是的,这是默认值;可能是因为我担心它是我曾经使用过的GNUism(例如,在GNU find中,您也可以省略
,而在BSD中,IIRC查找它是必需的)。如果文件位于子目录中,该怎么办?