我想查找扩展名中包含日期的文件。 在包含以下文件的文件夹中:
jvm-app-0.log.20180124.0000
jvm-app-0.log.20180124.0341
jvm-app-0.log.20180124.0341.tz
jvm-app-0.log.20180124.0355
我只想找到
jvm-app-0.log.20180124.0000
jvm-app-0.log.20180124.0341
jvm-app-0.log.20180124.0355
编辑:此外,如果第二个阻止是可选的。 e.g。
access.log.20180124
access.log.20180125
我试过以下:
find . * | grep "\*\.[0-9]{8}\.\*"
find . -regextype posix-egrep -regex '*\.[0-9+]\.[0-9+]'
find . -regextype posix-egrep -regex '*\.[0-9+]\.*'
find . -regextype posix-egrep -regex '\.[0-9+]\.*'
find . -regextype sed -regex "*.{[0-9]+\.[0-9]+}"
答案 0 :(得分:3)
find . -regex '.*\.[0-9]+'
.*
而不是*
来匹配任何前缀。+
需要在方括号之外。-regextype
没有必要。如果您extglob
已启用,则可以直接在shell中执行此操作:
$ shopt -s extglob
$ ls *.+([0-9])
jvm-app-0.log.20180124.0000 jvm-app-0.log.20180124.0341 jvm-app-0.log.20180124.0355
如果您想要递归搜索,请同时启用globstar
:
$ shopt -s extglob globstar
$ ls **/*.+([0-9])
jvm-app-0.log.20180124.0000 jvm-app-0.log.20180124.0341 jvm-app-0.log.20180124.0355
答案 1 :(得分:2)
即将结束,您可以使用此find
:
find . -regextype posix-egrep -regex '.*\.[0-9]+\.[0-9]+$'
以上find
将需要gnu find
。要使其适用于其他find
版本,例如BSD
,请使用:
find . -regex '.*\.[0-9]*\.[0-9]*$'
如果您使用的是bash
,您也可以extglob
使用globstar
,避免 find
:
shopt -s globstar extglob nullglob
printf '%s\n' **/*.+([0-9])