2012-10-02 58 views
1

我有一些運行他們public_html目錄內的軟件客戶端。該軟件包含一個名爲version.txt的文件,其中包含其軟件的版本號(數字和其他內容)。查找文本與文件名

我想寫一個bash腳本,將尋找一個直接每個用戶的/home/xxx/public_html/和輸出兩個文件路徑中名爲version.txt文件,並將該文件的內容,即:

/home/matt/public_html/version.txt: 3.4.07 
/home/john/public_html/version.txt: 3.4.01 
/home/sam/public_html/version.txt: 3.4.03 

所以我所嘗試過的遠遠是:

#!/bin/bash 

for file in 'locate "public_html/version.txt"' 
do 
     echo "$file" 
     cat $file 
done 

但是這根本不起作用。

+0

@ Tshepang很好,你正在做一些標籤清理。但請注意,'find'是UNIX中的一個命令,在這個問題中很方便。 – fedorqui

+0

@fedorqui所知,但它往往在不相關的問題時,離開它含糊不清,因此不好的標籤。即使標籤wiki也不鼓勵人們使用它。 – Tshepang

+0

@Tshepang不完全。摘錄說:「這個標記有多種含義,請不要使用這個標籤,如果你只是想找到的東西」,並在標籤維基指示它應該使用的情況下(http://stackoverflow.com/tags/查找/信息)。如果您打算在任何情況下刪除標籤,我認爲最好事先在meta中進行討論。 – fedorqui

回答

1
find /home -type f -path '*public_html/version.txt' -exec echo {} " " `cat {}` \; 

可能爲你工作,但你可以去無echocat( 「欺騙」 的grep):不使用發現

find /home -type f -path '*public_html/version.txt' -exec grep -H "." {} \; 
+0

這兩條線的第二個出色的作品。非常感謝。 –

0
for i in /home/*/public_html/version.txt; do 
    echo $i 
    cat $i 
done 

會找到所有相關的文件(使用通配符外殼),echo文件名並cat出文件。

如果你想要一個更簡潔的輸出,你應該調查grep並用適當的正則表達式替換例如回聲/貓

grep "[0-9]\.[0-9]" $i 
1

或者:

find /home -name "*/public_html/version.txt" -exec grep -H "" {} \; 
+0

該命令給我一個錯誤。如果我將「名稱」更改爲「全名」,但它有效。 –