【发布时间】:2011-04-11 02:16:21
【问题描述】:
我想更改文件的文件名后缀(使用 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 个月以上的日志;调整以适应您的周期时间。 -
您能否使用您的问题来提供更新,而不是为此目的使用答案。此外,如果您必须说“谢谢”,您可以在评论而不是答案中这样做:blog.stackoverflow.com/2011/01/how-to-say-thanks-in-an-answer。非常感谢。
标签: shell sed filenames rename