我有一大組文件(大約10k),文件名以prefix
開頭。他們沒有任何擴展。我想給他們一個數字擴展,它對應於每個包含特定string
的行數。我知道如何使用grep來查找這個號碼:從grep count添加文件擴展名
grep -c string *
此輸出(提取物)
prefix0123:1
prefix9876:5
我想是的計數添加爲擴展,即能夠得到
prefix0123.1
prefix9876.5
我正在bash控制檯中工作。
我有一大組文件(大約10k),文件名以prefix
開頭。他們沒有任何擴展。我想給他們一個數字擴展,它對應於每個包含特定string
的行數。我知道如何使用grep來查找這個號碼:從grep count添加文件擴展名
grep -c string *
此輸出(提取物)
prefix0123:1
prefix9876:5
我想是的計數添加爲擴展,即能夠得到
prefix0123.1
prefix9876.5
我正在bash控制檯中工作。
你可以爲每個文件運行一次你grep
命令,並直接替代其輸出到新的文件名:
for i in *
do
test -f "$i" || continue
mv -nv "$i" "$i.$(grep -c string "$i")"
done
我已經明確排除非正規文件,grep
不會喜歡一個目錄作爲參數(如果您選擇,您可以允許符號鏈接)。我還在移動命令中添加了-n
,所以我們不會意外覆蓋任何現有的文件。
最好的辦法是通過增加一個使用遞歸搜索與-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
命令。
這個工作如果'*'完全匹配一個文件?您可能需要告訴'grep'始終發出文件名 - 'grep -H'適用於GNU grep。 –
@TobySpeight:感謝您的建議。將讓OP根據他的輸出結果來決定。 – Inian
我更喜歡Toby Speight的解決方案,因爲它對我來說更清晰*發生了什麼事情。我不認爲你的解決方案沒有其他優勢。 – equaeghe