abc.dmg
的文件。我尝试使用聚光灯,但找不到。当我尝试查找并使用:find -name abc.dmg -path /
时,出现了错误。 在Mac OSX终端上使用find命令按文件名查找文件的正确语法是什么?
#1 楼
以其最简单的形式,find
采用一个参数:路径。按照其实际有用的形式,它采用了紧缩条件后的路径。因此,您需要:
find
(程序)/
(路径)和-name abc.dmg
(条件)。find / -name abc.dmg
评论
搜索整个驱动器时,您可能会遇到权限被拒绝的类型错误,但是除非您希望文件位于受限制的文件夹中,否则可以将其忽略。如果是这样,请使用sudo find / -name abc.dmg
–克里斯·纳瓦(Chris Nava)
2010-12-28 18:31
尝试过,但没有结果。
– SPRBRN
2010-12-28 18:55
大概那时,您的计算机上没有名为abc.dmg的文件。您可以使用-iname而不是-name来使搜索不区分大小写。我非常怀疑您实际上是在搜索“ abc.dmg”,并且鉴于(大概)事实,如果没有确切的细节,很难告诉您问题所在。
– VxJasonxV
2010-12-28 19:18
@rxt:如果找不到,就不存在...
– Robert S Ciaccio
2010-12-28 19:37
鉴于OP报告已尝试在问题文本中进行查找,因此值得注意的是,查找参数的顺序很重要。如果必须找到[路径] + [选择,分组和操作]。
– dmckee ---前主持人小猫
2010-12-28 22:21
#2 楼
例如,find . -name '*.csv'
使用通配符为我工作。假设他在find . -name '*.dmg'
中,OP还可以使用/
检查其当前目录。#3 楼
mdfind
命令使用Spotlight数据库http://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/mdfind.1.html
评论
但是,根据OP最初的问题,Spotlight找不到它。
– VxJasonxV
2010-12-28 19:24
#4 楼
您可以使用locate
命令。locate abc.dmg
评论
注意osx标签。 slocate db默认情况下不会填充。
– VxJasonxV
2010-12-28 17:46
创建数据库后尝试过,但是没有结果。
– SPRBRN
2010-12-28 18:56
如果定位和mdfind均失败,则可能是该文件不在您的计算机上。或者它没有命名,你怎么认为它的命名。也许搜索所有DMG可能是您的下一步?
– Peelman
2010-12-28 19:20
#5 楼
最简单的方法(我确定您已经尝试过,但是无论如何,让我将其添加到线程中)是在任何查找程序窗口右上角的搜索框中输入abc.dmg,然后选择“文件“名称””出现在搜索栏上的选项中。不需要终端。 dmg可能不在这些目录之一中。
如果我输入错误,请纠正我,但是我认为find命令需要知道输出什么:
find / -name abc.dmg -print
...应将任何结果(包括权限错误)打印到终端。
如果您不希望出现权限错误并要搜索其他用户目录,则:
sudo find / -name abc.dmg -print
#6 楼
您可以使用以下命令行功能快速查找并打开相关文件。我发现这比在Spotlight窗口中输入较长的查询字符串更容易。在
~/.bash_aliases
中添加以下功能。# find any item matching search query in file name
spot(){
mdfind "kMDItemDisplayName=='**'cd";
}
# restrict to files under (recursive) a specific path
findpaper(){
mdfind -onlyin "/Users/foo/articles" "kMDItemDisplayName=='**'cd";
}
# default to open the first entry unless 2nd positional argument is given
openpaper(){
FILEID=$(printf "%sp" ${2:-1})
open "$(mdfind -name -onlyin "/Users/foo/articles" "kMDItemDisplayName=='**'cd" | sed -n "${FILEID}")"
}
现在,要么
source ~/.bash_aliases
要么打开一个新的终端加载功能。要在文件名中的任何位置搜索带有单词,饼图和2016的文件,请执行spot pie*2016 #or
spot 2016*pie
无需在查询中添加或添加
*
作为搜索模式,'**'
已经在查询的开头和结尾标记了通配符条目。额外的cd
用于区分大小写且忽略变音符号,例如,fred
将同时返回Frédéric和FrEDeric。findpaper
将搜索限制在特定路径下(递归),而openpaper pie*201
将打开(搜索结果或openpaper pie*201 3
将打开第三个结果条目。为避免打开bash脚本或其他非文档文件,您可以通过其他搜索属性限制文件内容。有关使用其他搜索运算符的信息,请参见文件元数据查询表达式语法和https://ss64.com/osx/mdfind.html。评论
太棒了!静止它:D
– Atcold
19年7月15日在18:17
#7 楼
从/sudo find / &> ~/file-list.txt
sudo chown $(whoami) ~/file-list.txt
以root身份捕获磁盘上每个文件的列表,并通过grep捕获整个文件以搜索整个驱动器:cat ~/file-list.txt | grep abc.dmg
使用正则表达式仅显示.jpg和.dmg文件:
cat ~/file-list.txt | grep -E "(\.dmg|\.jpg)"
结果:
Applications/Visualisations/CurvedSpaces-forMac.app/Contents/Resources/Textures/paper.jpg
...等。不幸的是,它还会捕获所有已安装的磁盘,因此最好弹出那些具有很多链接的Time Machine磁盘。因此,在另一个窗口中,我运行
watch tail -n 10 ~/file-list.txt
,它向我显示了我卑鄙的黑客行为的根源所在。评论
错误的做法或值得一提的事情:(1)sudo find />〜/ file-list.txt似乎比以root身份运行整个外壳要好。 (2)find *将跳过/中隐藏的(点)对象(如果有)。 (3)&>是bashism。 (4)无用的猫。 (5)grep abc.dmg将显示例如/ foo / bar / 123abcXdmg456 / baz /任何。 //您的答案带给该线程的一件好事(其他答案没有)是一种方法,用户运行一次find,然后多次重复使用保存的结果,而无需一次又一次地查询文件系统。但是,这种潜在的优势并不突出。
–卡米尔·马乔洛夫斯基(Kamil Maciorowski)
19年6月9日在12:26
很好,谢谢卡米尔(Kamil),这样做了,还把$(whoami)
–东町
19年7月22日在12:00
评论
@VxJasonxV对于超级用户,Apple问题是100%的主题,并且不需要真正将每个Apple问题都移到那里。 iPhone或iPad问题将在需要时/在需要时转移。这并不是造成主题偏离主题的原因,而是这个通用主题有一个更具体的主题/站点的事实。
@Diago:在meta或chat上有关于此的任何讨论吗?我只是想知道,因为AFAIK apple.SE即将在Beta版之外发布,所以很高兴让所有人都在同一页面上。
@calavera。相当古老的讨论但相关的可以在这里找到。 Apple SE,Ubuntu SE和Linux SE都是超级用户的称赞,但我们绝不希望强迫用户迁移。我更喜欢在这里问苹果问题,而不是苹果,因为我确实使用3种不同的操作系统。如果我有一个非常具体的问题,请在一个更专业的网站上提问。