繁体   English   中英

Linux Shell 脚本 * 或???? 是自动替换

[英]Linux Shell Script * or ???? is replace automatically

我有一些文件存储在服务器上。 我必须使用模式获取所有这些文件,并排除包含当前日期作为文件名的文件。 文件如下

/var/tomcat/logs/catalina.2022-05-11.log
/var/tomcat/logs/catalina.2022-05-13.log
/var/tomcat/logs/catalina.2022-05-14.log
/var/tomcat/logs/catalina.2022-05-16.log
/var/tomcat/logs/error_1.log
/var/tomcat/logs/error_2.log
/var/tomcat/logs/error_3.log
/var/tomcat/logs/error_4.log

为此,我将模式存储在一个文件中,我想读取该文件的模式并在这些模式的帮助下找到所有文件。 下面给出了模式输入文件的内容,在下面我使用了 '%Y-%m-%d' 来识别日期格式,以便我可以排除当前的日期文件。

/var/tomcat/logs/catalina.*.log;%Y-%m-%d
/var/tomcat/logs/error_*.log

我开发了一个 shell 脚本,如下所示

#!/bin/sh

pattern_filepath=$1
while IFS= read -r line || [ -n "$line" ]; do
    pattern_var="$line"
    echo pattern: "$pattern_var"
    filepath=""
    date_format=""

    if [[ $pattern_var == *";"* ]];
    then
        echo "Semicolons ; separator is there"
        filepath=($(echo "$pattern_var" | cut -f1 -d ';'))
        echo filepath: "$filepath"
        date_format=($(echo "$pattern_var" | cut -f2 -d ';'))
    else
        echo "Semicolons ; separator is not there"
        filepath=$pattern_var
    fi

    echo "date_format: "$date_format
done < "$pattern_filepath"

运行脚本的命令

sh /var/monitoring/test.sh "/var/monitoring/pattern" > /var/monitoring/test.log

在日志文件中,我可以看到,在文件路径变量中,我将值作为日期获取,但应该使用星号而不是日期。 日志文件“test.log”

pattern: /var/tomcat/logs/catalina.*.log;%Y-%m-%d
Semicolons ; separator is there
filepath: /var/tomcat/logs/catalina.2022-05-11.log
date_format: %Y-%m-%d
pattern: /var/tomcat/logs/error_*.log
Semicolons ; separator is not there
date_format: 

请帮我解决这个问题,我怎样才能做到这一点?

简单,直截了当。 实现需求,无需复杂的模式、列表或...

#!/bin/bash

sourcedir="/var/tomcat/logs"
if [[ ! -d "$sourcedir" ]]
then
    echo "ERROR: source directory $sourcedir does not exist."
    exit 1
fi
targetdir="/tmp/somedir"
if [[ ! -d "$targetdir" ]]
then
    echo "ERROR: target directory $targetdir does not exist."
    exit 1
fi

# Get the catalina logs
cp "$sourcedir"/catalina.*.log "$targetdir"

# Remove the catalina log for today
filetoremove="$targetdir"/catalina.$(date +%Y-%m-%d).log
if [[ -f "$filetoremove" ]]
then
    rm -f "$filetoremove"
fi

# Get the error logs
cp "$sourcedir"/error_*.log "$targetdir"

您可以为cprm命令添加错误检查和恢复。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM