为什么这个 bash 命令占用了设备上的所有空间?

为什么这个 bash 命令占用了设备上的所有空间?

我对通过 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

相关内容