在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".
但不行。我不能硬编码文件列表,因为它需要从不同的文件中读取
答案 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[@]"} \)