如何通过在文件名上添加当前日期来移动/重命名多个文件

如何通过在文件名上添加当前日期来移动/重命名多个文件

我需要在 Red Hat 上修改一个 bash 脚本,该脚本可以 mv/重命名多个文件并在其名称上添加当前日期。例如,我有以下大量文件:

BSS4C.SASS.CCAC.I101010.P211008

BSS4C.SASS.CSVC.I102210.P211008

(还有 28 个这样的文件,其中的开头为PBSS4C。* 并以 * 结尾.P211008

在这个文件中211008 代表处理日期。我需要将处理日期替换为文件名中的当前日期并替换时间在文件名的开头。

预期结果:

时间BSS4C.SASS.CCAC.I101010.P211011

时间BSS4C.SASS.CSVC.I102210.P211011

提前致谢。

答案1

如果您有权访问perl-rename(通常rename在基于 Debian 的系统上调用),您可以执行以下操作:

rename -n "s/^P/T/; s/\.P211008$/\.P$(date +'%y%m%d')/" PBSS4C.*P211008

-n将导致rename仅打印它将执行的更改,而无需实际重命名任何内容。如果您确信它能达到您想要的效果,请在不带-n.

如果你没有perl-rename,你可以这样做:

date=$(date +'%y%m%d')
for i in PBSS4C.*P211008; do 
    newName=${i/P/T} 
    newName=${newName/.P211008/}
    echo mv -- "$i" "$newName."P"$date"; 
done

在这里,一旦您运行了它并确认它执行了您想要的操作,请再次运行它,而无需echo实际重命名文件。

相关内容