我正在尝试使用以下命令压缩任何附加了日期的文件:
#!/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部分,但我需要确保它首先起作用。
您正在使用此模式作为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