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

问题描述:

我想查找与特定根目录中的特定子字符串匹配的文件路径。如何查找路径以递归方式匹配根目录中的子字符串?

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

我通过

path=$(echo $LINE |cut -d'(' -f2|cut -d')' -f1) 

只提取文件()的内容现在,我试图找到通路,包括子字符串$ path by

find . -path $path 

结果是空的。

但是,如果我在命令行中单独尝试它,它将返回路径列表。例如,

find . -path '.*/cm-audio/src/main*' 

我不能说明为什么这个完整的脚本不工作。 你可以给我一些建议吗?

+0

删除模式文件中的'''从'file('。*/cm-audio/src/main/*')'make'file(。*/cm-audio/src/main/*)' - 或 - 'find。 -path“$ {path //'}”' – jm666

+0

请参阅编辑我的答案部分 – Montmons

试试这个:

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 

等待啊..我想你从包含像线文本文件阅读,其中:

但是我现在我错看..让我适应我在回答秒..

编辑

如果您将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 
+0

我还有一个问题。如果某些路径以/.*'not/*'结尾,我该如何处理这种异常情况?例如,'。*/power-manager/PowerManager /.*' –

+0

如果两个路径都输入到include_pattern中,则它们应该被正确处理。另外,所有以'/.*'结尾的路径也应该通过'/ *'来找到,因为asterix将遍历任何可用的字符......所以它也会遍历'.'。如果将路径限制为'/.*',请注意只能找到隐藏的文件或文件夹,因为这些文件或文件夹是唯一以'.'开头的文件或文件夹。 – Montmons