2016-12-06 20 views
0

在bash, 從文件中我讀模式匹配的文件列表中進行搜索。 變量的內容會是這樣的閱讀如何使用找到空間的多個文件路徑和grep

files="C:/Downloads/tutorial java*.txt D:/text materials*.java" 

它,然後在查找使用

find $files -type f -exec grep -PrnIi my-search-term --color=auto {} /dev/null \; 

我試圖逃避的空間 '\' 這樣

files="C:/Downloads/tutorial\ java*.txt D:/text\ materials*.java". 

但無法正常工作。我無法對文件列表進行硬編碼,因爲它需要從不同文件中讀取

+0

'C:/ Downloads/tutorial java * .txt'看起來比一個實際的路徑更像是一堆文件的通配符。 – Inian

+0

文件可以像教程java1.txt等 – cbn

+1

你需要指定一個路徑作爲參數,而不是文件列表後'find ..' – Inian

回答

1

您正在將路徑與模式組合在一起以便在這些路徑中匹配。這很好,但您需要基本上搜索整個文件系統以查找與完整路徑匹配的文件。

find/\(-path "C:/Downloads/tutorial java*.txt" -o -path "D:/text materials*.java" \) ... 

如果要將這些存儲在變量中,請使用數組而不是常規變量。

files=("C:/Downloads/tutorial java*.txt" "D:/text materials*.java") 
patterns=(-path "${files[0]}") 
for pattern in "${files[@]:1}"; do 
    patterns+=(-o -path "$pattern") 
done 
find/\("${patterns[@]"} \) 
相關問題