【问题标题】:Bash script for renaming files, using modular arithmetic?用于重命名文件的 Bash 脚本,使用模运算?
【发布时间】:2011-07-11 13:52:45
【问题描述】:

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

时间戳遵循 24 小时格式(其中 10am 是 100000,12pm 是 120000,6pm 是 180000,10pm 是 220000,等等)。我想将每个时间调低 10 小时,这样上午 10 点是 000000,下午 12 点是 020000,等等。

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

非常感谢任何帮助。

【问题讨论】:

    标签: bash math rename


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:
      #!/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}" - 在原始名称的子字符串之前添加新的小时,从第三个字符开始

      【讨论】:

      • 谢谢,这很有意义。当我实际尝试运行它时,我遇到了一个错误。语法错误:预期操作数(错误标记为“. + 14 )% 24”) .来自(哪里? #{f:0:2} 似乎有问题...
      • 这是实际错误:2011-03-08 19:43:00 -0800: -: line 4: ( 10#*. + 14 ) % 24 : 语法错误:操作数预期(错误标记是 ". + 14 ) % 24 ") (1)
      猜你喜欢
      • 2011-12-25
      • 2014-12-15
      • 2013-08-06
      • 1970-01-01
      • 2014-07-17
      • 2016-04-30
      • 2013-06-10
      • 2016-05-12
      • 2015-08-02
      相关资源
      最近更新 更多