通过终端搜索Mac?


22

是否有任何命令可使用终端搜索Mac?我尝试使用usin grep进行搜索,但似乎反应迟钝,没有任何反应。

例如,我输入“ grep Files”(文件夹名称),它只打印一个空白行,什么也没有发生。



我对搜索所有类型的文件感兴趣;不一定要排除文本文件,而不仅仅是文本文件。
JFW 2010年

Answers:


21

您也可以使用mdfind命令来执行Spotlight搜索。更多信息在这里

使用mdfind -name searchterm以名为检索文件searchterm。用于mdfind searchterm对文件名和内容进行搜索。


25

如果您只想查找具有特定名称的文件,请使用 find

可以在此处找到手册页,或man find在终端提示符下键入。

基本上,find将递归查找符合您指定条件的文件。最简单的例子:

find . -name file_name -print

这将从当前目录开始搜索名为“ file_name”的文件,然后在下面搜索并打印具有该名称的文件。

find ~ -name ".DS_Store" -delete

这将找到所有.DS_Store文件并删除它们。

您可以按名称,正则表达式,日期进行搜索。您可以使用带-exec谓词的任何Unix方式对文件进行操作。

您还可以将find用作更复杂的操作流程的开始。例:

find . -type f -print | egrep -i '\.m4a$|\.mp3$'

将找到所有扩展名为.m4a或.mp3的文件

find . -type f -print | egrep -i '\.m4a$|\.mp3$' | wc -l

将为您提供这些文件的数量。


如果-print是唯一谓词,则可以省略;此外,还有简单的通配符。因此,查找.txt目录下的所有文件foo都可以通过find foo -name \\*.txt
Norman Gray

@yoshi:绝对是错误的。find .从cwd 输入IS是递归的。尝试输入find .您的根目录!
drewk

我的坏人可以发誓它不是递归的,但是服务器可能已经停顿了
耸耸肩-nuala 2012年

5

如果要搜索整个文件夹,只需在grep上使用-r即可:

grep -r pattern folder/to/search

使用find,您还可以使用xargs:

find folder/to/search -name '*.txt' | xargs grep pattern

或确保您一次搜索两个文件,并因此指定了文件名:

find folder/to/search -name '*.txt' | xargs grep -n2 pattern

2

grep期望模式和文件规范。如果缺少,则使用传递的内容作为模式,并等待数据通过标准输入进行搜索。

如果要使用更复杂的文件规范,请使用find

find ~ -name '*.txt' -exec grep -q 'secret' {} \; -print

我只是希望它能找到具有我在命令中输入的名称的文件。
JFW 2010年

在这种情况下,您无需在中使用-exec谓词find
伊格纳西奥·巴斯克斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.