使用特定模式重命名这堆文件

使用特定模式重命名这堆文件

我有许多具有以下名称详细信息的文件..

2007-07-22-2300-11S.NAN___024_ABI___HH_E_SAC

在哪里:

  • 2007-07-22是日期。
  • 2300-11S是 hhmm-sec。
  • NAN___024每个文件的网络是否相同(新名称中不需要)。
  • ABI__HH_E 是东频道的站名。
  • SAC是扩展。

而且,我想以相同的格式重命名所有文件:

2007.204.23.00.ABI.e

在哪里:

  • 2007是年。
  • 204是朱利安日(07-22)。
  • 23.00是时间。
  • ABI是车站。
  • e是频道名称。

答案1

假设你:

  • 想要在位置 2 处使用“1 + 序数日期”。
  • “_”填充的电台名称。
  • 频道名称小写

然后这应该执行所需的转换。

$ ls
2007-07-22-2300-11S.NAN___024_ABI___HH_E_SAC
$ for i in *; do
    od="$(expr $(date +%j -d "${i:0:10}") + 1 )";
    chn="${i:39:1}";
    sta="$(echo ${i:30:6} | tr -d '_')";
    mv "$i" "${i:0:4}.$od.${i:11:2}.${i:13:2}.$sta.${chn,,}" ;
  done 
$ ls
2007.204.23.00.ABI.e

答案2

对于大规模重命名,prename是您的朋友。在这种情况下:

prename 's/^(\d*)-(\d*-\d*)-(\d*)-.*___\d*_(\w*)___\w*_(\w*)_\w*/$1.$2.$3.$4.$5/' *

(在澄清相应问题之前忽略儒略日期)。

相关内容