重命名并转换文件名中的日期(不带文件扩展名)

重命名并转换文件名中的日期(不带文件扩展名)

我的文件集是根据 GMT 时区命名的。我使用以下步骤成功重命名并将所有文件转换为所需的时区。

1.此代码删除所有扩展名为 .gif 的文件rename "s/.gif//g" *

2.此代码转换并重命名所有文件 for f in *; do mv -v -- "$f" "$(date -d "$f" '+%Y%m%d%H%M')"; done

  • 转换示例:‘15Z29Aug2017’ -> ‘201708292030’

不幸的是,我必须再次使用以下方法为所有文件设置扩展名 .giffor f in *; do mv "$f" "$f.gif"; done

我究竟怎样才能通过在步骤2中编辑代码来跳过文件扩展名的删除操作?

步骤 2 取自:如何批量将文件夹名称从一种日期格式转换为另一种日期格式

答案1

您需要做的就是将其脱下.gif$f放回去:

for f in *; do mv -v -- "$f" "$(date -d "${f%%.gif}" '+%Y%m%d%H%M')".gif; done

${f%%.gif}接受变量f并删除其中最后一次#出现的(因此是两次).gif,因此即使是像 这样的奇怪文件名也1.gif2.gif只会被.gif删除最后一次。这个惊人的功能被称为Bash 参数扩展当你用这个名字搜索时,你可以阅读有关其耀眼力量的所有信息,例如此 Bash 常见问题解答– 它的功能远不止于此!

相关内容