我希望能够通过 Bash 脚本更改文件名后缀,但是有时候文件名中只含有一个句点,而有些文件名则包含两个。
目前我使用以下命令:
目前我使用以下命令:
new_file=`echo ${file} | sed 's/\(.*\.log.*\)'${suf}'/\1.'${num}'/'`
其中,'new_file' 是新文件名,'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 个月的日志;根据您的周期进行调整。 - Jonathan Leffler