我想從文件(使用bash腳本)更改文件名後綴,但有時文件有一個句點,一些有兩個。更改文件名後綴(使用sed?)
現在我用這個:
new_file=`echo ${file} | sed 's/\(.*\.log.*\)'${suf}'/\1.'${num}'/'`
其中 'NEW_FILE' 爲新的文件名, '文件' 的原始文件名, '$ {SUF}' 該文件的後綴,$ {num}個新數。
所以some.log必須成爲some.log.1和some.log.1必須成爲some.log.2。用我的代碼some.log變成some.log.1,但是some.log.1仍然some.log.1。
我希望我很清楚。我很欣賞任何建議(即使不使用sed)。
更新:
@paxdiablo。測試我認爲出了問題。
現在我用這段代碼作爲測試;
#!/usr/bin/bash
shft() {
for suff in {6..1} ; do
if [[ -f "$1.${suff}" ]] ; then
((nxt = suff + 1))
echo Moving "$1.${suff}" to "$1.${nxt}"
mv -f "$1.${suff}" "$1.${nxt}"
fi
done
echo Moving "$1" to "$1.1"
mv -f "$1" "$1.1"
}
clear
folder=~/logs/*.log
for i in {1..20}; do
echo ${i}> ~/logs/some.log
for fspec in ${folder} ; do
shft "${fspec}"
done
done
現在,每件事情都很好。對困惑感到抱歉。
允許建議更好的命名方案避免頭痛。例如,'some.log'變成'some.log.20100911-013024';下一個'some.log'變成'some.log.20100911-084137';等等,其中後綴是日誌切換的日期/時間。這避免了一次重命名多個文件。名稱按時間順序自動排序。唯一的缺點是您對備份日誌的數量沒有限制。使用'find。 -mtime +183 -name'some.log。*'-exec rm {} \;'處理超過6個月的日誌;調整以適應您的週期時間。 – 2010-09-11 14:20:22
你可以使用你的問題提供更新,而不是爲此使用答案。此外,如果你必須說「謝謝」,你可以在評論中做到這一點,而不是回答:http://blog.stackoverflow.com/2011/01/how-to-say-thanks-in-an-answer/。非常感激。 – Kev 2011-01-29 14:55:48