我想在当前目录中查找包含文本“chrome”的文件。
$ find . -exec grep chrome
find: missing argument to `-exec'
我究竟做错了什么?
答案1
您错过了 a ;
(此处转义以\;
防止 shell 解释它)或 a+
和 a {}
:
find . -exec grep chrome {} \;
或者
find . -exec grep chrome {} +
find
将执行grep
并替换{}
为找到的文件名。;
和之间的区别+
在于,对于每个文件执行;
单个命令,而一次将尽可能多的文件作为参数给出。grep
+
grep
答案2
find
您根本不需要为此使用; grep 能够从当前目录中所有内容的全局列表中打开文件:
grep chrome *
...或者甚至递归文件夹及其下的所有内容:
grep chrome . -R
答案3
find . | xargs grep 'chrome'
你还可以这样做:
find . | xargs grep 'chrome' -ls
第一个显示文件中的行,第二个仅列出文件。
Caleb 的选择更简洁,击键次数更少。
答案4
这是我通常如何使用 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"