如何在find和grep

时间:2016-12-06 19:44:26

标签: bash shell

在Bash, 从文件中我正在读取与要搜索的模式匹配的文件列表。 阅读后可变内容将是这样的

files="C:/Downloads/tutorial java*.txt D:/text materials*.java"

然后在find

中使用它
find  $files -type f -exec grep -PrnIi my-search-term --color=auto {} /dev/null \;

我尝试用' \'像这样

files="C:/Downloads/tutorial\ java*.txt D:/text\ materials*.java". 

但不行。我不能硬编码文件列表,因为它需要从不同的文件中读取

1 个答案:

答案 0 :(得分:1)

您正在将路径与模式组合在一起以匹配这些路径。没问题,但是您需要在整个文件系统中搜索与完整路径匹配的文件。

 find / \( -path "C:/Downloads/tutorial java*.txt" -o -path "D:/text materials*.java" \) ...

如果要将它们存储在变量中,请使用数组,而不是常规变量。

files=( "C:/Downloads/tutorial java*.txt" "D:/text materials*.java")
patterns=(-path "${files[0]}")
for pattern in "${files[@]:1}"; do
  patterns+=(-o -path "$pattern")
done
find / \( "${patterns[@]"} \)