使用模块化算术重命名文件的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
答
最简单的方法可能是提取时间戳并使用date
将其变成几秒钟,对结果执行正常运算,然后将其转换回来。 date -d datestring +format
可以让你做这些转换。
谢谢,这很有道理。当我真正尝试并运行它时,出现错误。语法错误:期望操作数(错误标记为“。+ 14)%24”)。来自(哪里?它似乎有一个#{f:0:2}的问题... – Shahruz 2011-03-09 03:37:26
下面是实际的错误:2011-03-08 19:43:00 -0800: - :第4行:(10#*。+ 14)%24:语法错误:期望的操作数(错误标记是“。+ 14)%24”)(1) – Shahruz 2011-03-09 03:45:37
没关系,明白了。感谢你的帮助! – Shahruz 2011-03-09 04:08:09