我需要将包含特定日期时间戳的动态文件扩展名替换为固定文件扩展名。
例如,
08242016G0040156.ZIP.20160907141452
09042016SHOC0003.ZIP.20160904044504
我需要将它们分别替换为08242016G0040156.ZIP
和09042016SHOC0003.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*