如何在Linux中查找扩展名为的文件

时间:2018-03-22 11:54:23

标签: regex linux find

我想查找扩展名中包含日期的文件。 在包含以下文件的文件夹中:

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]+}"

2 个答案:

答案 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])