我想在Macbook上找到一个文件名:的文件abc.dmg
。我尝试使用聚光灯,但找不到。当我尝试查找并使用:时find -name abc.dmg -path /
,出现了错误。
在Mac OSX终端上使用find命令按文件名查找文件的正确语法是什么?
我想在Macbook上找到一个文件名:的文件abc.dmg
。我尝试使用聚光灯,但找不到。当我尝试查找并使用:时find -name abc.dmg -path /
,出现了错误。
在Mac OSX终端上使用find命令按文件名查找文件的正确语法是什么?
Answers:
最简单的形式是find
采用一个参数:路径。它以实际有用的形式采取紧缩标准的道路。
因此,您想要:
find
(该程序)/
(路径),以及-name abc.dmg
(条件)。find / -name abc.dmg
find
问题。如果一定要find [path]+ [selection, grouping, and actions]
。
该mdfind
命令使用Spotlight数据库
http://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/mdfind.1.html
您可以使用该locate
命令。
locate abc.dmg
osx
标签。slocate db默认情况下不会填充。
locate
和mdfind
都失败,很可能是该文件是不是你的机器上。还是它的未命名你怎么认为它的命名。也许搜索所有DMG可能是您的下一步?
最简单的方法(我确定您已经尝试过,但是无论如何,让我将其添加到线程中)是在任何查找程序窗口右上角的搜索框中输入abc.dmg,然后选择“文件出现在搜索栏上的选项中的“名称”。
无需终端。
还要记住,Spotlight仅索引在Spotlight控制面板中指定的目录,而abc.dmg可能不在这些目录之一中。
如果我错了,请纠正我,但是我认为find命令需要知道输出什么:
find / -name abc.dmg -print
...应将任何结果打印到终端(包括权限错误)。
如果您不希望出现权限错误并想搜索其他用户目录,则:
sudo find / -name abc.dmg -print
您可以使用以下命令行功能快速查找并打开相关文件。我发现这比在Spotlight窗口中输入较长的查询字符串更容易。
在中添加以下功能~/.bash_aliases
。
# find any item matching search query in file name
spot(){
mdfind "kMDItemDisplayName=='*$1*'cd";
}
# restrict to files under (recursive) a specific path
findpaper(){
mdfind -onlyin "/Users/foo/articles" "kMDItemDisplayName=='*$1*'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=='*$1*'cd" | sed -n "${FILEID}")"
}
现在,要么source ~/.bash_aliases
打开一个新的终端加载功能。要在文件名中的任何位置搜索带有单词,饼图和2016的文件,请执行
spot pie*2016 #or
spot 2016*pie
无需*
在查询之前或之后添加搜索模式,只需在查询的'*$1*'
开头和结尾标记通配符即可。另外一个cd
是不区分大小写的并且忽略变音符号,例如,fred
将同时返回Frédéric和FrEDeric。
findpaper
将搜索限制在特定路径(递归)下的结果,同时openpaper pie*201
打开(或多个结果中的第一个)搜索结果或openpaper pie*201 3
打开第三个结果条目。为避免打开bash脚本或其他非文档文件,您可以通过其他搜索属性来限制文件内容。有关使用其他搜索运算符的信息,请参见文件元数据查询表达式语法和https://ss64.com/osx/mdfind.html。
以/为根目录捕获磁盘上每个文件的列表
sudo find / &> ~/file-list.txt
sudo chown $(whoami) ~/file-list.txt
通过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
,它向我显示了我卑鄙的黑客行为的出处!
sudo find / > ~/file-list.txt
似乎比以root用户运行整个外壳要好。(2)find *
将跳过中的隐藏(点)对象(如果有)/
。(3)&>
是bashism。(4)无用cat
。(5)grep abc.dmg
将打印例如/foo/bar/123abcXdmg456/baz/whatever
。//您的答案带给该线程的一件好事(其他答案没有)是一种方法,用户运行find
一次,然后多次重复使用保存的结果,而无需一次又一次地查询文件系统。但是,这种潜在的优势并不突出。