加1到文件名

问题描述 投票:0回答:3

我的任务是日志轮换,我找不到任何命令,可以使用1的文件名中的某些数字。

例如,我有一些名字的文件:wrapper.log.1wrapper.log.2。我需要重命名并将该文件移动到其他目录并获取wrapper_1.logwrapper_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:另外,我认为,可以在新文件夹中创建新文件,时间戳或smth就像后缀一样。例如:

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
bash sed mv
3个回答
2
投票

要查找最大数量的wrapper_日志文件:

find . -type f -name "*.log" -exec basename {} \; | ggrep -Po '(?<=wrapper_)[0-9]' | sort -rn | head -n 1

我正在使用grep的珍珠开关为“wrapper_”做后视,然后反向排序找到的数字并取第一个。如果你想生成一个新的文件名,我会使用awk,例如:

find . -type f -name "*.log" -exec basename {} \; | ggrep -Po '(?<=wrapper_)[0-9]' | sort -rn | head -n 1 | awk '{print "wrapper_"$1 + 1".log" }'

这将生成一个文件名,序列中包含下一个数字。


0
投票

我完全不明白你的问题,但我知道使用美元符号和双括号可以执行计算:

Prompt>echo $((1+1))
2

0
投票

最后,我找到了两个解决方案。首先,它是一种狂欢,像这样

#!/bin/bash

#DECLARE

FILENAME=$1
DATE=$(date '+%d.%m.%y')
SRC_DIR="/usr/local/apache-servicemix-6.1.0/data/log"
DEST_DIR="/mnt/smxlog/$HOSTNAME"

#START

mkdir -m 777 "$DEST_DIR/$DATE"

if [ -d "$DEST_DIR/$DATE" ]
then

for f in $(find "$SRC_DIR/" -name "$FILENAME.log.*") 

do

TIME=$(date '+%H_%M_%S.%3N')
NEW_FILENAME="$FILENAME-$TIME.log"
NEW_DEST_WITH_FILE="$DEST_DIR/$DATE/$NEW_FILENAME"

mv $f $NEW_DEST_WITH_FILE
gzip "$NEW_DEST_WITH_FILE"

done

else 
exit 1
fi

#END

第二个变体是使用log4j logger属性,但它应该上传到servicemix系统文件夹log4j-1.2.17_fragment.jar和apache-log4j-extras-1.2.17_fragment。也许可以将它们作为捆绑包上传,我没试过。两个jar都使用不同的API。有https://logging.apache.org/log4j/1.2/apidocs/index.html?overview-summary.htmlhttp://logging.apache.org/log4j/companions/apidocs/index.html?overview-summary.html和属性将

log4j.logger.wrapper.log=DEBUG, wrapper
log4j.additivity.logger.wrapper.log=false
log4j.appender.wrapper=org.apache.log4j.rolling.RollingFileAppender  
log4j.appender.wrapper.rollingPolicy=org.apache.log4j.rolling.TimeBasedRollingPolicy  
#This setting should be used with commented line log4j.appender.wrapper.File=... if it needs to zip to target directory immediately
#log4j.appender.wrapper.rollingPolicy.FileNamePattern=/mnt/smxlog/${env:HOSTNAME}/wrapper.%d{HH:mm:ss}.log.gz
#Or it is possible to log and zip in the same folder, and after that with cron replace zipped files to required folder 
log4j.appender.wrapper.rollingPolicy.FileNamePattern=${karaf.data}/log/wrapper.%d{HH:mm:ss}.log.gz
log4j.appender.wrapper.File=${karaf.data}/log/wrapper.log
log4j.appender.wrapper.triggeringPolicy=org.apache.log4j.rolling.SizeBasedTriggeringPolicy  
#Size in bytes
log4j.appender.wrapper.triggeringPolicy.MaxFileSize=1000000
log4j.appender.wrapper.layout=org.apache.log4j.PatternLayout  
log4j.appender.wrapper.layout.ConversionPattern=%d{dd-MM-yyyy_HH:mm:ss} %-5p [%t] - %m%n
log4j.appender.wrapper.Threshold=DEBUG
log4j.appender.wrapper.append=true
© www.soinside.com 2019 - 2024. All rights reserved.