我想找到与特定根目录中的特定子字符串匹配的文件路径。
下面是我的shell脚本。当我逐个测试时,结果很好。但是当我循环时,结果是空的。谁可以就原因提出建议?
我的剧本
filename=include_pattern
cat $filename | while read LINE
do
echo $LINE
path=$(echo $LINE |cut -d'(' -f2|cut -d')' -f1)
echo $path
result=$(find . -path $path)
echo $result
done
include_pattern
file('.*/cm-audio/src/main/*')
file('.*/cm-common/include/cm_common/utils/*')
我只通过
提取file()的内容path=$(echo $LINE |cut -d'(' -f2|cut -d')' -f1)
现在,我尝试通过
查找包含子字符串$ path的路径find . -path $path
结果是空的。
但是,如果我在命令行中单独试用它,它会返回路径列表。例如,
find . -path '.*/cm-audio/src/main*'
我不能说这个完整脚本不起作用的原因。 你能告诉我一些这方面的建议吗?
答案 0 :(得分:0)
试试这个:
filename='text_file_containing_include_pattern_on_each_line.txt'
while IFS='' read -r line || [[ -n "$line" ]]; do
path=$(echo "$line" |cut -d'(' -f2|cut -d')' -f1)
find \. -path "${path//\'}"
done < $filename
等等啊..我以为你在读取包含如下行的文本文件的地方
file('.*/cm-audio/src/main/*')
file('.*/cm-common/include/cm_common/utils/*')
但我现在看到我错了。让我在一秒钟内调整我的答案。
修改强>
如果您将include_pattern存储在变量中:
include_pattern="file('.*/cm-audio/src/main/*')
file('.*/cm-common/include/cm_common/utils/*')"
for file in $include_pattern; do
path=$(echo "$file" |cut -d'(' -f2|cut -d')' -f1)
find \. -path "${path//\'}"
done