将动态文件扩展名替换为固定文件扩展名

将动态文件扩展名替换为固定文件扩展名

我需要将包含特定日期时间戳的动态文件扩展名替换为固定文件扩展名。

例如,

08242016G0040156.ZIP.20160907141452  
09042016SHOC0003.ZIP.20160904044504 

我需要将它们分别替换为08242016G0040156.ZIP09042016SHOC0003.ZIP

答案1

使用 bash,一个带有一些字符串操作的简单循环

for f in ./*.ZIP.*
do
   mv "$f" "${f%.*}"
done

"${f%.*}".删除中字符串中最后一个(包括最后一个)之后的所有内容$f

答案2

for filename in $(find . -name '*ZIP*'); do mv $filename $(echo $filename | sed 's|\(.*\)\.ZIP.*|\1.ZIP|g') ; done

答案3

使用perl基础rename命令:

$ touch 08242016G0040156.ZIP.20160907141452 09042016SHOC0003.ZIP.20160904044504

$ rename -n 's/\.\d+$//' *ZIP*
rename(08242016G0040156.ZIP.20160907141452, 08242016G0040156.ZIP)
rename(09042016SHOC0003.ZIP.20160904044504, 09042016SHOC0003.ZIP)

-n选项用于试运行。如果重命名没问题,请将其删除以进行实际重命名


如果文件可以位于多个子目录中,请使用find

find -name '*ZIP*' -exec rename -n 's/\.\d+$//' {} +


.如果上次使用 后有除数字以外的字符

rename -n 's/\.[^.]+$//' *ZIP*

相关内容