我想检测一个文件是否在一个目录中的名称与特定的日期戳。然而,也有一个时间戳连接到它。我可以计算出日期戳,但不是时间戳,所以我需要一些时间戳。
以下是示例文件名:backup_myserver_202310152100.log
这是我的表达式:log_file="backup_${hostname_arg}_${logfile_sunday}[0-9]*.log"
,但它实际上搜索这个文件名(由echo检查):backup_myserver_20231015[0-9]*.log
如果有帮助的话,时间戳总是用for数字表示。
我试着从www和其他问题中得到解决方案,但似乎我不是为RegEx而生的。
我尝试了上面的表达式以及以下内容:log_file="backup_${hostname_arg}_${logfile_sunday}{....}.log"
因为我读到一个点确实代表一个字符。消息来源的答案五花八门。
2条答案
按热度按时间tcbh2hod1#
当给变量赋值时,存储在变量中的是模式本身(
backup_myserver_20231015[0-9]*.log
),而不是它对现有文件名的扩展,因为1)你给它加了双引号(引号之间不进行路径名扩展),2)路径名扩展从不在参数赋值的右侧进行。验证所有这些的一个简单方法是输入
declare -p log_file
,看看log_file
是什么以及它有什么值。您还可以键入echo "$log_file"
(打印模式)和echo $log_file
(打印文件名(如果存在)),因为$log_file
没有引号,并且在执行echo
之前执行了路径名扩展。一个更好的方法是分配一个数组,使用不带引号的模式,并打开
nullglob
选项,这样如果没有匹配的日志文件,模式将扩展为空字符串(输出前缀为-|
):如果你想精确匹配4位数,你可以试试:
你也可以使用来自GNU
findutils
的find
,如果你有的话,用正则表达式代替更简单的glob模式:guykilcj2#
你的指挥似乎很好
我试着把它放在一个小的shell脚本中,它也能工作。
Code result of shell script