【问题标题】:Globbing certain YYYYMMDD dates遍历某些 YYYYMMDD 日期
【发布时间】:2014-11-08 23:44:39
【问题描述】:

我正在尝试按日历周为我的 perl 脚本提供几个文件。 它只是获取从 bash 中获取的所有文件:

foreach my $input (@ARGV){
   ...
}

命名约定如下:

FILE_XYZ_20140908_0000.000XYZ

一个月的第一周没问题..

FILE_XYZ_2014090[1-7]_*

..会匹配得很好。当一天从 9 点切换到 10 点时,情况会变得很棘手。
是否有一种模式可以匹配从 201409 08 到 201409 14 的所有文件?

【问题讨论】:

    标签: bash wildcard glob


    【解决方案1】:

    我不确定旧版本的 Bash,但在我的 (4.1.11(2)) 中

    echo 9{08..14}
    

    返回

    908 909 910 911 912 913 914
    

    在旧版本中,您必须使用更复杂的表达式(在 3.00.15(1) 中测试):

    echo 9{0{8..9},1{0..4}}
    

    【讨论】:

    • 第二个对我有用。 (3.00.16(1)) 非常感谢!
    【解决方案2】:

    如果您启用扩展模式支持

    shopt -s extglob
    

    您可以指定以下模式:

    FILE_XYZ_201409@(01|02|03|04|05|06|07)_*
    FILE_XYZ_201409@(08|09|10|11|12|13|14)_*
    FILE_XYZ_201409@(15|16|17|18|19|20|21)_*
    FILE_XYZ_201409@(22|23|24|25|26|27|28)_*
    

    模式不能很好地用于范围,这就是为什么你需要明确地写出来。

    【讨论】:

    • chep,您是否扩展了这些以提高可读性?为什么不直接使用0[1-7]_*@(0[8-9]|1[0-4])_* 等?
    • 是的,可读性。例如,8-14 范围内的折叠模式只短了 7 个字符,而且明显不太清晰。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-09
    相关资源
    最近更新 更多