2

尝试编写我的第一个复杂的 linux 查询并遇到一些知识空白。

这个想法是找到所有可能是 .doc 或 .txt 的文件,并在内容中搜索文本小丑。

所以我开始从根搜索。

$find /

然后我为文件名添加了通配符。

$find / -name '*.doc'...uhh oh

第一个问题。我如何指定或?是管子吗?或双管|| 或者...?我需要像这样重复 -name 参数吗?

$find / -name '*.doc' || -name '*.txt'

第二 ?我要在...之后/之前添加字符串的grep吗?

$find / -name '*.doc' || -name '*.txt' grep -H 'cat' {} \

最后有一个地方我可以像 SQLFiddle 一样验证语法/运行吗?

TIA

4

3 回答 3

3

查找中的“或”是-o

不过,您必须再次指定查找类型。所以像:

find / -name *.doc -o -name *.txt

你可以简单地把你的 grep 命令放在前面,只要你把你的 find 命令用反引号括起来:

grep 'whatever' `find / -name *.doc -o -name *.txt`

有一个相当不错的指南可以在这里找到

于 2013-08-29T12:38:10.620 回答
1

你想要这样的东西:

find / \( -name \*.doc -o -name \*.txt \) -exec grep clown {} \; -print

您指定 or with -owithin \( \),您grep在 a 中运行-exec,您可以在 bash shell 中验证语法。

于 2013-08-29T12:36:52.627 回答
0

尝试:

(find ./ -name "*.txt" -print0 2>/dev/null ; find ./ -name "*.doc" -print0 2>/dev/null) | xargs -0 grep clown
于 2013-08-29T12:53:53.313 回答