我试图使用以下内容对任何附加日期的文件进行tar:
#!/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。但是,我得到了一个错误:
tar: *.log.[0-9]{4}-[0-9]{2}-[0-9]{2}: Cannot stat: No such file or directory所以,它从字面上解读这个模式,就像一个字符串。我需要的是在日志扩展名之后,它使用模式来匹配任何文件的日期格式。这将最终进入log旋转式配置文件的后置部分,但我需要确保它首先工作。
发布于 2020-04-07 17:55:09
您正在使用此模式作为shell glob模式:
createDate=[0-9]{4}-[0-9]{2}-[0-9]{2}它实际上是一个正则表达式,而不是一个shell glob模式。您的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"
donehttps://stackoverflow.com/questions/61085769
复制相似问题