如何查找路径以递归方式匹配根目录中的子字符串?

时间:2017-04-03 12:49:34

标签: shell find substring

我想找到与特定根目录中的特定子字符串匹配的文件路径。

下面是我的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*'

我不能说这个完整脚本不起作用的原因。 你能告诉我一些这方面的建议吗?

1 个答案:

答案 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