首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Linux中使用日期模式循环遍历文件。

在Linux中使用日期模式循环遍历文件。
EN

Stack Overflow用户
提问于 2020-04-07 17:23:23
回答 1查看 141关注 0票数 2

我试图使用以下内容对任何附加日期的文件进行tar:

代码语言:javascript
复制
#!/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

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

代码语言:javascript
复制
tar: *.log.[0-9]{4}-[0-9]{2}-[0-9]{2}: Cannot stat: No such file or directory

所以,它从字面上解读这个模式,就像一个字符串。我需要的是在日志扩展名之后,它使用模式来匹配任何文件的日期格式。这将最终进入log旋转式配置文件的后置部分,但我需要确保它首先工作。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-07 17:55:09

您正在使用此模式作为shell glob模式:

代码语言:javascript
复制
createDate=[0-9]{4}-[0-9]{2}-[0-9]{2}

它实际上是一个正则表达式,而不是一个shell glob模式。您的glob匹配是失败的,只给出了一个结果:*.log.[0-9]{4}-[0-9]{2}-[0-9]{2}

可以通过以下方法更改此行为:

代码语言:javascript
复制
shopt -s nullglob

您的脚本应该修改如下:

代码语言:javascript
复制
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
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61085769

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档