使用正则表达式“重命名”的问题(Linux)

使用正则表达式“重命名”的问题(Linux)

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

A) db_mywebsite_2018-01-10_00-25.sql.gz(150 MB)

) mywebsite1_2018-01-10_00-01.tar.gz(2 GB)

我想从文件名中删除日期(XXXX-XX-XX_XX-XX)。由于每天都会进行备份,因此每个文件的名称中都会有不同的日期。为此,我使用以下命令:

rename -v -n 's/_\d{4}-\d{2}-\d{2}_\d{2}-\d{2}//' *.sql.gz

为了测试,我touch编辑了两个db_mywebsite_2018-01-10_00-25.sql.gz文件mywebsite1_2018-01-10_00-01.tar.gz

命令:

rename -v -n 's/_\d{4}-\d{2}-\d{2}_\d{2}-\d{2}//' *.sql.gz

输出:

db_mywebsite_2018-01-10_00-25.sql.gz renamed as db_mywebsite.sql.gz

1。问题是,尽管上面的消息“db_mywebsite_2018-01-10_00-25.sql.gz 重命名为 db_mywebsite.sql.gz”,当我通过它检查时,ls -l它看起来像该文件名尚未重命名。

2。重命名命令(正则表达式)不适用于文件mywebsite1_2018-01-10_00-01.tar.gz

答案1

  1. 对于 perl 版本rename,该选项-n意味着无操作:打印要重命名的文件的名称,但不重命名。 如果您希望重命名该文件,请不要使用该-n选项。因此,代替:

    rename -v -n 's/_\d{4}-\d{2}-\d{2}_\d{2}-\d{2}//' *.sql.gz
    

    使用:

    rename -v 's/_\d{4}-\d{2}-\d{2}_\d{2}-\d{2}//' *.sql.gz
    
  2. 考虑:

    rename -v -n 's/_\d{4}-\d{2}-\d{2}_\d{2}-\d{2}//' *.sql.gz
    

    上面的命令只会尝试重命名以.sql.gz.它不会重命名,mywebsite1_2018-01-10_00-01.tar.gz因为该文件以.tar.gz.要重命名这两个文件,请尝试:

    rename -v -n 's/_\d{4}-\d{2}-\d{2}_\d{2}-\d{2}//' *.tar.gz *.sql.gz
    

相关内容