我有一个备份脚本,它创建了两个文件:
a )db_mywebsite_2018-01-10_00-25.sql.gz
b )mywebsite1_2018-01-10_00-01.tar.gz
我正在寻找带有正则表达式的Linux命令来重命名这两个文件以匹配 db_mywebsite.sql.gz mywebsite1.tar.gz
regex命令需要从文件名中删除日期(20XX-XX-XX_XX-XX)(每天都会有所不同)。
感谢您的帮助!
答案 0 :(得分:0)
如果文件在您当前的目录中,您可以使用:
rename 's/(db_)?(mywebsite([0-9]+)?)_.+\.(tar|sql)\.gz/$1$2.$4.gz/g' *
其中:
(db_)?
检查存储在捕获的第1组中的db_
的0或1次出现(mywebsite([0-9]+)?)
是mywebsite
的捕获组,后跟任意数量的数字,保存为捕获组2 _.+
而非直接搜索日期,而不是搜索_
后跟任何字符序列。\.(tar|sql)\.gz
允许.tar.gz
或.sql.gz
并将3个字符序列保存在捕获组4中。如果在捕获组之后使用任何字符序列导致问题,您可以使用日期格式超级严格:
rename 's/(db_)?(mywebsite([0-9]+)?)_[0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}-[0-9]{2}\.(tar|sql)\.gz/$1$2.$4.gz/g' *
或搜索数字,连字符和下划线的组合:
(db_)?(mywebsite([0-9]+)?)[0-9_-]+\.(tar|sql)\.gz