我对通过 bash 进行搜索还不太熟悉,所以请随时给我关于使用方法的建议而不是这个,我永远不会再使用它。
我正在寻找目录中递归出现的字符串,其中包含大约 50 个不太大的 php 文件;一些在当前目录中,一些在当前目录下的目录中,最多在三级目录中。
我使用的方法是
find . | xargs grep "module" > module.txt
在简单(单级)目录中,这种方法可以正常工作,但在这种情况下,文件大小会达到 4 GB,直到填满分区上的所有空间。甚至还没有完成。
该文件为何变得这么大?
答案1
module.txt
在管道启动之前创建,因此它包含在搜索中。grep
在其中找到“module”的实例,因此向其中添加一行包含单词“module”。然后,Which grep 找到并添加。然后,Which grep 找到并添加。然后,Which grep 找到并添加。Which...
答案2
> module.txt
如果没有,输出是什么?
为什么不尝试使用grep -R "module" . > ../module.txt
?
答案3
find /path -type f -iname "*.php" | while read -r FILE
do
grep -H "module" "$FILE" >> "file_with_search_term_found.txt"
done
或者如果你的 grep 有递归函数,
grep -RH "module" *.php
或者使用 bash 4.0 shell
shopt -s globstar
for file in /path/**/*.php
do
if [ -f "$file" ];then
while read -r line
do
case "$line" in
*module* ) echo $line >> module.txt;;
esac
done <"file"
fi
done