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”也适用于Macls*.jpg | cut-f1-d”
将“.jpg”分为您想要列出的任何扩展名如果您在Mac终端上,并且已经在您想要进行搜索的目录中,那么这也可能适用于您:
find *.pdf
至少它对我有用。@Prostak,这将只显示常规文件,而不是目录<代码>-类型f用于过滤符号链接、目录、设备等。我将此标记为正确答案。但是谢谢你们两位的帮助!为什么必须使用
-print
,这不是默认值吗?@giannischristofakis:刚刚检查了POSIX标准,是的,这是默认值;可能是因为我担心它是我曾经使用过的GNUism(例如,在GNU find中,您也可以省略
,而在BSD中,IIRC查找它是必需的)。如果文件位于子目录中,该怎么办?