我有一系列名为HHMMSSxxxxxxxxxxxxxxxx.mp3的文件,其中HH,MM和SS是时间戳的一部分,x是每个文件唯一的。
时间戳遵循24小时表格(其中上午10点是100000,下午12点是120000,下午6点是180000,晚上10点是220000等)。我想把每一个减少10个小时,所以上午10点是000000,下午12点是020000等。
我知道用于重命名和移动等的基本BASH命令,但我无法弄清楚如何对文件名进行模运算。
非常感谢任何帮助。
答案 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
可让您进行这些转化。