【发布时间】:2019-08-01 21:58:25
【问题描述】:
我的任务是日志轮换,我找不到任何可以从文件名中获取数字为 1 的命令。
例如,我有一些文件名为:wrapper.log.1、wrapper.log.2。
我需要重命名该文件并将其移动到其他目录并获取wrapper_1.log、wrapper_2.log。文件移动后,应从源目录中删除。
有可能,在新文件夹中有同名的文件。
所以,我应该得到最后一个文件,并将其文件名加 1,如wrapper_(2+1).log。
在我的整个任务中,我发现了类似的东西
find . -name "wrapper.log.*"
mkdir $(date '+ %d.%m.%y')
find . -name "wrapper.log.*" |sort -r |head -n1 | sed -E 's/(.log)(.[0-9])/_$(2+1)\1/'
但是,当然,它在第二行之后就不起作用了。
而且,将来它需要在 bash 中。
P.S:另外,我认为,可以在新文件夹中创建带有时间戳或类似后缀的新文件。 例如:
folder file
01.01.19 wrapper_00_00_01
wrapper_00_01_07
wrapper_01_10_53
wrapper_13_07_11
02.01.19
wrapper_01_00_01
wrapper_03_01_07
wrapper_05_10_53
wrapper_13_07_11
【问题讨论】:
-
如果您要创建一个新目录以将日志文件放入其中,为什么还要担心名称与以前存在的文件冲突?
-
因为文件夹可能包含我应该复制的确切名称的文件。我的意思是,新文件夹每天创建一次,但日志文件从 ....log.1 到 ....log.10 范围内的原始文件夹轮换。所以,如果我只是将文件复制到新文件夹中,经过一段时间后,wrapper.log.1 会擦除名为 wrapper_1.log 的新文件夹中的文件,但它应该是 wrapper_11.log
-
要么您正在创建一个新目录 --
mkdir $(date '+ %d.%m.%y'),要么您正在将文件复制到一个已经存在的目录中。是哪个? -
我需要在每天 00:00 左右创建一个新文件夹
-
只是出于好奇:为什么要重新发明轮子并编写自己的日志轮换,而不是使用大多数 linux 系统上应该存在的 logrotate (github.com/logrotate/logrotate)?