使用 bash 脚本用正则表达式重命名多个文件

Renaming multiple filex with regex using bash script

我需要重命名多个文件,删除名称的 refdate.dta。 refdate 每天都在变化,格式为 'yyyymmdd'。文件名示例:

alerts_stock_out_level_2_20210415.dta.csv -> alerts_stock_out_level_2.csv base_simulated_20210721.level2.dta.csv -> base_simulated.level2.csv relation_product-deposit_no_cover_20210531.dta.csv -> relation_product-deposit_no_cover.csv

有什么方法可以在 bash 中用正则表达式做到这一点吗?

无需正则表达式,只需 bash glob patterns and parameter expansion 即可:

shopt -s extglob # Make sure extended patterns are enabled
for file in *csv; do
    # First remove the .dat
    newname=${file/.dat}
    # And rename the file after removing the _refdate part
    mv "$file" "${newname/_+([0-9])}"
done