2017-05-10 80 views
1

我有一大組文件(大約10k),文件名以prefix開頭。他們沒有任何擴展。我想給他們一個數字擴展,它對應於每個包含特定string的行數。我知道如何使用grep來查找這個號碼:從grep count添加文件擴展名

grep -c string * 

此輸出(提取物)

prefix0123:1 
prefix9876:5 

我想是的計數添加爲擴展,即能夠得到

prefix0123.1 
prefix9876.5 

我正在bash控制檯中工作。

回答

0

你可以爲每個文件運行一次你grep命令,並直接替代其輸出到新的文件名:

for i in * 
do 
    test -f "$i" || continue 
    mv -nv "$i" "$i.$(grep -c string "$i")" 
done 

我已經明確排除非正規文件,grep不會喜歡一個目錄作爲參數(如果您選擇,您可以允許符號鏈接)。我還在移動命令中添加了-n,所以我們不會意外覆蓋任何現有的文件。

1

最好的辦法是通過增加一個使用遞歸搜索與-r標誌產生的file:count一對grep,然後重新命名它爲

grep -cr bash * | while IFS=':' read -r file count; do 
    mv -v "$file" "${file}.${count}" 
done 

你可以用echo "$file" "${file}.${count}"首先要確認是否更換mv所有的文件都會重新命名爲預計要使用,然後使用mv命令。

+2

這個工作如果'*'完全匹配一個文件?您可能需要告訴'grep'始終發出文件名 - 'grep -H'適用於GNU grep。 –

+0

@TobySpeight:感謝您的建議。將讓OP根據他的輸出結果來決定。 – Inian

+0

我更喜歡Toby Speight的解決方案,因爲它對我來說更清晰*發生了什麼事情。我不認爲你的解決方案沒有其他優勢。 – equaeghe