【问题标题】:Regex & ls or find正则表达式 & ls 或查找
【发布时间】:2016-04-19 18:14:15
【问题描述】:

我只需要选择 20140729 - 20140921 之间的目录。

目录如下所示。

20140729_154208 20140814_221350 20140829_215623

最好的方法是什么?

谢谢

【问题讨论】:

  • 不解析ls的输出。它几乎总是多余且不可靠的。

标签: unix find ls


【解决方案1】:

使用find

为了查找某个范围内修改过的文件,如果目录中最后一个文件的创建时间与目录名匹配,最简单的方法是在范围的边界创建文件,使用-newer 谓词。

touch -t 201407290000 start
touch -t 201409210000 stop
find . -newer start \! -newer stop -type d

(我不知道如何处理regex 中的日期,但我希望我有时间学习)

使用awk

是的,为什么不使用awk 而不是构建静态regex 来匹配案例?

将 find 或 ls 结果传递给awk,用一个小程序检查结果在stopstart 之间(注意:对于find,我必须substr(3,10) 进行比较):

find .  |awk -v start=20140729 -v stop=20140921 \
'{ curr=substr($0, 3, 10); if (curr <= stop && curr >= start) { print $0 } }'

(它在 AIXLinux 上对我有用)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多