使用regex重命名文件(Linux命令行)

时间:2018-01-10 21:23:20

标签: regex linux shell

我有一个备份脚本,它创建了两个文件:

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)(每天都会有所不同)。

感谢您的帮助!

1 个答案:

答案 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中。
  • 输出结合捕获组1,2和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