其实我正在做一个 Bash脚本 搜索要删除的备份目录。
我有一个目录 ~/test/
包含一些 "备份 "目录,命名如下。
20200302_000001-daily
20200330_000001-monthly
20200528_000001-weekly
20200529_000001-daily
20200530_000001-daily
20200531_000001-monthly
20200601_000001-daily
20200602_000001-daily
有一个 find
命令,我想 记录所有包含字符串的目录名称。daily
或 weekly
在一个数组中:
BACKUPS=(`find $BACKUP_DIR -maxdepth 1 -regex ".*[daily|weekly]$"`)
/ 其中 $BACKUP_DIR
是 "test "目录的绝对路径。
问题是,这个regex匹配所有的备份目录,经过几个小时的研究,我没有找到原因。
有意思的是,如果我使用regex .*daily$
匹配所有的 "每日 "备份目录(和 "每天 "备份目录)。.*weekly$
匹配所有的 "每周 "备份目录)。)
我知道还有其他的方法,但我真的很想用regex成功。
你可以使用一个能够匹配整个输入的regex,并且包含一个分组结构而不是一个括号表达式。
BACKUPS=(`find $BACKUP_DIR -maxdepth 1 -regex ".*/.*\(daily\|weekly\)$"`)
这里,POSIX BRE模式意味着:
.*/
- 匹配任何0或更多的字符,直到最后一个字符。/
.*
- 任何0或更多的字符,直到\(daily\|weekly\)
- 要么 daily
或 weekly
字序 (注意 [day|week]
同为 [adekwy|]
因为它是一个括号表达式)$
- 字符串的末端。