it-swarm.cn

如何运行find -exec?

我想在当前目录中找到包含文本“ chrome”的文件。

$ find . -exec grep chrome
find: missing argument to `-exec'

我究竟做错了什么?

538
ripper234

您错过了一个;(这里为\;转义以防止Shell解释它)或+{}

find . -exec grep chrome {} \;

要么

find . -exec grep chrome {} +

find将执行grep并将{}替换为找到的文件名。 ;+之间的区别在于,对于;,每个文件执行一个grep命令,而对于+,则给出尽可能多的文件作为grep的参数。

801
bmk

您根本不需要使用find; grep能够从当前目录中所有内容的全局列表中打开文件:

grep chrome *

...甚至递归地查找文件夹及其下的所有内容:

grep chrome . -R
51
Caleb
find . | xargs grep 'chrome'

您也可以:

find . | xargs grep 'chrome' -ls

第一个向您显示文件中的行,第二个仅列出文件。

Caleb的选择更整洁,击键次数更少。

20
Mathew

查找是一种方法,您可以尝试the_silver_searcher,那么您要做的就是

ag chrome

它会在所有文件(包括子目录)中搜索chrome,并且比查找更快

7
Ask and Learn

这是我通常如何使用find/exec的示例。

find  . -name "*.py" -print -exec fgrep hello {} \;

这将以递归方式搜索所有.py文件,并为每个文件打印出文件名和fgrep的文件(对于每个文件)中的“ hello”。输出看起来像(今天只运行了一个):

./r1.py
./cgi-bin/tst1.py
print "hello"
./app/__init__.py
./app/views.py
./app/flask1.py
./run.py
./tst2.py
print "hello again"
5
jon

要查看文件列表而不是行:

grep -l "chrome" *

要么:

grep -r -l "chrome" .
3
mateusz.szymborski