重命名和重新排列多个文件名而不重命名

重命名和重新排列多个文件名而不重命名

我有近 500 个目录,其中充满了名称类似于 的文件e141107140847.pdf,我需要将它们重命名为用户友好的名称,例如2014_11_SDUXS_0847.pdf.我一直在尝试使用 for 循环和 sed,但我不知所措,无法弄清楚如何将所有内容组合在一起。我也无法访问rename这台机器(FreeBSD)上的命令。

映射如下:

  • e— 垃圾字符,待删除
  • 14— 翻译为SDUXS.我有 36 种不同的映射需要处理。
  • 11- 月
  • 07— 天,待删除
  • 14— 年份,转换为 4 位数字
  • 0847— 位置代码,保留。

答案1

因此,将其组合起来作为您的具体示例:

#!/bin/bash
filename='e141107140847.pdf'
echo Given file name ${filename} -
case ${filename:1:2} in
  14)
    mapping="SDUXS"
    ;;
  *)
    mapping="XXXXX"
    ;;
esac
month="${filename:3:2}"
year="20${filename:7:2}"
location="${filename:9:4}"
echo New filename - ${year}_${month}_${mapping}_${location}.pdf

似乎给出了您想要的结果。展开case..esac所有映射的语句并用 a 括起来for filename in *.pdf,您可以确认输出;然后只需将其更改echo为:

mv "$filename" "${year}_${month}_${mapping}_${location}.pdf"

相关内容