2017-04-03 59 views
1

我想查找與特定根目錄中的特定子字符串匹配的文件路徑。如何查找路徑以遞歸方式匹配根目錄中的子字符串?

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

回答

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 

等待啊..我想你從包含像線文本文件閱讀,其中:

但是我現在我錯看..讓我適應我在回答秒..

編輯

如果您將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

相關問題