我想改变文件名后缀来自文件(使用 bash 脚本),但有时有些文件带有一个句点,有些文件带有两个句点。
现在我用这个:
new_file=`echo ${file} | sed 's/\(.*\.log.*\)'${suf}'/\1.'${num}'/'`
其中“new_file”是新文件名,“file”是原始文件名,“${suf}”是文件后缀,${num} 是新数字。
So some.log必须成为一些.log.1 and 一些.log.1必须成为一些.log.2。用我的代码some.log变成一些.log.1, but 一些.log.1遗迹一些.log.1.
我希望我说得足够清楚。我很感激任何建议(即使不使用 sed)。
Update:
@paxdiablo https://stackoverflow.com/questions/3690936/change-file-name-suffixes-using-sed/3690996#3690996。我认为测试出了问题。
现在我用这段代码作为测试;
#!/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
现在一切正常。对困惑感到抱歉。
如果您想要滚动日志文件,并且根据您需要的复杂程度,我之前使用过以下片段:
#!/usr/bin/bash
# rollover.sh
# Rolls over log files in the current directory.
# *.log.8 -> *.log.9
# *.log.7 -> *.log.8
# : : :
# *.log.1 -> *.log.2
# *.log -> *.log.1
shft() {
# Change this '8' to one less than your desired maximum rollover file.
# Must be in reverse order for renames to work (n..1, not 1..n).
for suff in {8..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"
}
for fspec in *.log ; do
shft "${fspec}"
#date >"${fspec}" #DEBUG code
done
这将自动将日志文件滚动到版本 9,尽管您只需更改suff
for
循环以允许更多。
接着就,随即DEBUG
添加后,会自动创建新文件进行测试,以下记录显示了它的实际效果:
pax> touch qq.log ; ./rollover.sh
Moving "qq.log" to "qq.log.1"
pax> touch "has spaces.log" ; ./rollover.sh
Moving "has spaces.log" to "has spaces.log.1"
Moving "qq.log.1" to "qq.log.2"
Moving "qq.log" to "qq.log.1"
pax> ll *log*
-rw-r--r-- 1 pax None 30 2010-09-11 20:39 has spaces.log
-rw-r--r-- 1 pax None 0 2010-09-11 20:39 has spaces.log.1
-rw-r--r-- 1 pax None 30 2010-09-11 20:39 qq.log
-rw-r--r-- 1 pax None 30 2010-09-11 20:38 qq.log.1
-rw-r--r-- 1 pax None 0 2010-09-11 20:38 qq.log.2
该脚本的好处是它可以轻松配置以处理大量历史记录(通过更改{8..1}
位),处理带空格的名称,并在日志文件丢失时相对稳健地处理间隙。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)