gpt4 book ai didi

shell - 更改文件名后缀(使用 sed ?)

转载 作者:行者123 更新时间:2023-12-05 00:06:08 26 4
gpt4 key购买 nike

我想更改 文件名后缀 来自文件(使用 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

现在一切正常。对困惑感到抱歉。

最佳答案

如果您希望滚动日志文件,并且根据您需要获得的复杂程度,我之前使用过以下部分:

#!/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} 位),处理带有空格的名称,并且如果日志文件丢失,则可以相对稳健地处理间隙。

关于shell - 更改文件名后缀(使用 sed ?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3690936/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com