2017-04-04 47 views
0

我想编写一个命令来查找包含给定内容的所有文件。例如所有带有短语“iso文件”的文件。我已经写了这个命令:如何通过它包含的内容查找文件?

find -exec -grep -l "iso file"{} 

但是我得到一个消息,指出'-exec'没有参数。这个命令应该如何?

+0

你的语法稍微偏离。 '找。 -exec grep -l“iso file”{} \;'注意这会为每个文件产生一个新的grep。 'grep -r“iso文件”。“可能更有效率。 – blackghost

回答

2

-exec操作要求您指定要执行的以分号结尾的命令。你已经省略了分号。您还在grep命令的名称前加了一个连字符,其结果不可能是系统上任何命令的名称。此外,如果你这样做,那么你可能只想考虑普通文件,而不是目录(或特殊文件)。

find -type f -exec grep -l "iso file" {} \; 

在另一方面,find是帮倒忙比这里帮助的,因为grep都可以对自己进行递归搜索:你可以写这样的命令解决所有这些问题

grep -lR "iso file" . 
0

您可以使用下面的命令使用xargs打印所有文件/目录。

find ./ -type f -print | xargs grep -l "iso file" 

如果你要打印匹配,以及你可以删除grep命令“-l”参数,写这样的整条生产线。

find ./ -type f -print | xargs grep "iso file" 
+0

如果文件名中有空格或时髦的字符,这将失败。最好做一些像'find ./ -type f -print0 | xargs -0 grep -l“iso文件”......这些都是零。 – gilez