使用模块化算术重命名文件的Bash脚本?

问题描述:

我有一系列名为HHMMSSxxxxxxxxxxxxxxxx.mp3的文件,其中HH,MM和SS是时间戳的一部分,并且每个文件的x都是唯一的。使用模块化算术重命名文件的Bash脚本?

时间戳以24小时的形式出现(其中上午10点是100000,12点是120000,下午6点是180000,下午10点是220000等)。我想每个下降10小时,所以上午10点是000000,下午12点是020000等

我知道基本的BASH命令重命名和移动等,但我不知道该怎么办模块化的算术文件名。

任何帮助将非常感激。

#!/bin/bash 
for f in *.mp3 
do 
    printf -v newhour '%02d' $(((10#${f:0:2} + 14) % 24)) 
    echo mv "$f" "$newhour${f:2}" 
done 

删除echo使其功能。

说明:

  • printf -v newhour '%02d' - 这是像sprintf(),该值被存储在指定的变量
  • $(((10#${f:0:2} + 14) % 24)) - 10#强制数为10进制(例如08否则将被认为是无效的八进制) ,${f:0:2}提取前两个字符(小时),其余的算术运算
  • "$newhour${f:2}" - 在原始名称的子字符串前加上新的小时,从第三个字符开始acter
+0

谢谢,这很有道理。当我真正尝试并运行它时,出现错误。语法错误:期望操作数(错误标记为“。+ 14)%24”)。来自(哪里?它似乎有一个#{f:0:2}的问题... – Shahruz 2011-03-09 03:37:26

+0

下面是实际的错误:2011-03-08 19:43:00 -0800: - :第4行:(10#*。+ 14)%24:语法错误:期望的操作数(错误标记是“。+ 14)%24”)(1) – Shahruz 2011-03-09 03:45:37

+0

没关系,明白了。感谢你的帮助! – Shahruz 2011-03-09 04:08:09

最简单的方法可能是提取时间戳并使用date将其变成几秒钟,对结果执行正常运算,然后将其转换回来。 date -d datestring +format可以让你做这些转换。