我需要在 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
实际重命名文件。