我有一个备份脚本,它创建两个文件:
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
对于 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
考虑:
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