2011-07-30 53 views
1

我有一個匹配文件名稱的小問題。使用Linux cmds匹配列表名稱與一堆文件

我有一個包含約160名一個文本文件。我有一個包含2000多個文件的文件夾。其中一些包含這160個名字。我正在尋找一個grep cmd,它可以在文本文件中獲取每個名稱,並嘗試將其與該文件夾的內容進行匹配。

我試圖做到這一點在Perl,或者只是直線前進的Linux CMDS,但也已制定了對我非常好,因爲我不熟悉其一。

因此,例如:文本文件包含

abc acc eee fff 

和文件夾將有abcXXX,accXXX,eeeXXX和fffXXX

我需要通過列表進行排序,找出一個人失蹤。

THX 戴維

回答

0

如果能夠安排的文本文件,有一個單獨的行每個名字,那麼下面的命令將做你需要的東西:

ls myfolder | grep -f mytextfile 

一個辦法讓每一個名字在文本文件中的單獨一行將在vi編輯副本,併發出命令:

:%s/ /^V^M/g 
:wq 

^V^M意味着如果在文件的內容搜索中鍵入 「控制-V」,然後 「CONTROL-M」)

+0

喜佩裏,THX的答覆,我想你的CMD和它說-f是grep的非法選項。 – Davy

+0

-f選項不起作用,它表示這是一個非法選項。我可以用ack替換它,仍然可以達到相同的結果嗎? – Davy

+0

你在使用什麼樣的Linux? 「-f」在很長一段時間內一直是grep的選擇! – Perry

1

#!/bin/sh 
for i in `cat files` 
do 
    grep -R $i folder --color 
done 

,如果你的文件的文件名搜索:

#!/bin/sh 
for i in `cat files` 
do 
find . -name $i* 
done 
1
for file in $(< list); 
do 
    [ ! -f ${file}xxx ] && echo "x: " ${file}xxx 
done 

list是文件,包含文件名「abc acc ...」的列表。
<是重定向 - 所以我們從文件名單「,同爲$(cat list)閱讀。如果該文件未被命名爲「列表」,則只需替換該名稱即可。
file在該語句中聲明並反覆綁定到「list」中的所有條目。之後它被用作$ {file}。
[ ! -f ${file}xxx ]是一個試驗,-f(ILE)是否存在,爲ABC它搜尋SEARCH_TERM_EXAMPLES文件abcxxx。
但是!否定搜索,所以如果不存在這樣的文件,則調用echo ...。 「x:」只是一個調試遺留物。

我們可以改善的部分:

for file in $(< list); 
do 
    [ -f ${file}xxx ] || echo ${file}xxx 
done 

,而不是「NOT X和Y」,我們可以寫「X或Y」 - 意思是一樣的,只是短:該文件不存在或呼應其名稱。

||是短路的。

+0

你能否澄清一下cmds?文件是一個變量?那麼列表呢?他們都是我必須申報的變數嗎? – Davy

+0

我已經在答案中完成了。 –

+0

thx澄清,我試圖運行代碼現在,但它不斷告訴我「缺少$在循環變量toronto160_match_aginst_file.pl行1」。另外,它應該是一個for循環或foreach循環? – Davy

相關問題