2014-04-14 34 views
0

我對Unix命令很陌生,這對你們中的一些人來說可能是非常直觀的,所以請原諒我的無知。一個命令來查找另一個文件夾中的文件中的文件名列表

我想要的是在包含其他子文件夾和文件的文件夾中查找所有.txt文件。使用找到的列表(僅適用於文件名和擴展名(無完整路徑)),我需要搜索另一個文件夾中的所有.xml文件(也包含子文件夾和文件,並且是第一個搜索文件夾的父文件夾)在第一次搜索中找到的文件名的發生。

希望這已經夠清楚了!

我嘗試這樣做,也沒有工作(我知道,這是一個絕對的初學者的嘗試):

find . -name "*.txt" -printf "%f\n" -exec find .. -name "*.xml" | xargs grep {} \; 
+2

也許你應該添加一個示例目錄結構到你的問題與預期的輸出。目前還不清楚你在問什麼。 –

+0

你如何在XML文件中搜索?你使用XPath嗎? –

+0

@ Lutz Horn,無所謂,只是基於文本的搜索 –

回答

1

也許somethiing像這樣(未經):

find . -name "*.txt" -printf "%f\n" > /tmp/a 
find . -name "*.xml" -exec grep -HFf /tmp/a {} \; 

也許添加-w爲以及用於字詞分隔的搜索。

另一次嘗試,過程中換人:

find . -name "*.xml" -exec grep -HFf <(find . -name "*.txt" -printf "%f\n") {} \; 
+0

似乎工作。我們不能用一個命令來擁有它們嗎? –

+0

@馬克·塞切爾,這兩個命令正在工作,但不是一個班輪 –

+0

我想不出一種方式來做到這一刻 - 對不起。我會繼續思考,也許有人聰明會出來幫助! –

0

這是你在找什麼?

find . -name \*.txt -exec basename {} .txt \; | while read file; do grep -l "\<${file}\>\.txt" /path/to/*.xml && echo "found: $file"; done 

請注意,如果特殊字符(如空格,換行符等)位於文件名中,此解決方案有可能中斷。

+0

嗯,什麼都不緊湊? –

+0

你問了一條線。也許如果你解釋了你想要*發現的文件,我們可以提出更多適用的答案。在此之前,這看起來像[XY問題](http://mywiki.wooledge.org/XyProblem)。 – ghoti

+0

有趣的鏈接!然而,馬克的第一個答案正是我想要的,而我的問題根據這個答案得到了很好的理解。之後我問的是一個更方便的方法。現在如果你的問題是我是否要求X或Y,答案是X. –

相關問題