用于重命名文件的Bash脚本,使用模运算?

时间:2011-03-09 02:52:28

标签: bash math rename

我有一系列名为HHMMSSxxxxxxxxxxxxxxxx.mp3的文件,其中HH,MM和SS是时间戳的一部分,x是每个文件唯一的。

时间戳遵循24小时表格(其中上午10点是100000,下午12点是120000,下午6点是180000,晚上10点是220000等)。我想把每一个减少10个小时,所以上午10点是000000,下午12点是020000等。

我知道用于重命名和移动等的基本BASH命令,但我无法弄清楚如何对文件名进行模运算。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

#!/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}" - 在原始名称的子字符串前面添加新小时,从第三个字符开始

答案 1 :(得分:0)

最简单的方法可能是提取时间戳并使用date将其转换为秒数,对结果进行正常数学运算,然后将其转换回来。 date -d datestring +format可让您进行这些转化。