如何查找路径以递归方式匹配根目录中的子字符串?
我想查找与特定根目录中的特定子字符串匹配的文件路径。如何查找路径以递归方式匹配根目录中的子字符串?
下面是我的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*'
我不能说明为什么这个完整的脚本不工作。 你可以给我一些建议吗?
试试这个:
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
我还有一个问题。如果某些路径以/.*'not/*'结尾,我该如何处理这种异常情况?例如,'。*/power-manager/PowerManager /.*' –
如果两个路径都输入到include_pattern中,则它们应该被正确处理。另外,所有以'/.*'结尾的路径也应该通过'/ *'来找到,因为asterix将遍历任何可用的字符......所以它也会遍历'.'。如果将路径限制为'/.*',请注意只能找到隐藏的文件或文件夹,因为这些文件或文件夹是唯一以'.'开头的文件或文件夹。 – Montmons
删除模式文件中的'''从'file('。*/cm-audio/src/main/*')'make'file(。*/cm-audio/src/main/*)' - 或 - 'find。 -path“$ {path //'}”' – jm666
请参阅编辑我的答案部分 – Montmons