在Linux中浏览带有日期模式名称的文件

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

我正在尝试使用以下命令压缩任何附加了日期的文件:

#!/bin/bash

createDate=[0-9]{4}-[0-9]{2}-[0-9]{2}

for file in $HOME/test/*.log.$createDate ; do
    log=$(basename $file)
    find . -type f | tar -zcvf  $log.tar $log
done

这应该压缩任何在日志扩展名后附加日期的文件,例如test.log.2020-01-01。但是,我得到一个错误:

tar: *.log.[0-9]{4}-[0-9]{2}-[0-9]{2}: Cannot stat: No such file or directory

因此,它以字符串形式按字面意义读取此模式。我需要的是在日志扩展名之后使用该模式来匹配具有该日期格式的任何文件。最终,这将进入logrotate配置文件的postrotate部分,但我需要确保它首先起作用。

regex bash tar logrotate
1个回答
1
投票

您正在使用此模式作为Shell Glob模式:

createDate=[0-9]{4}-[0-9]{2}-[0-9]{2}

实际上是一个正则表达式,而不是一个外壳glob模式。您的全局匹配为失败,并且仅给出一个结果:*.log.[0-9]{4}-[0-9]{2}-[0-9]{2}

可以使用以下方式更改此行为:

shopt -s nullglob

您的脚本应修改为此:

shopt -s nullglob

for file in $HOME/test/*.log.[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]; do
    log=$(basename "$file")
    find . -type f | tar -zcvf "$log.tar" "$log"
done
© www.soinside.com 2019 - 2024. All rights reserved.