![重命名和重新排列多个文件名而不重命名](https://linux22.com/image/112660/%E9%87%8D%E5%91%BD%E5%90%8D%E5%92%8C%E9%87%8D%E6%96%B0%E6%8E%92%E5%88%97%E5%A4%9A%E4%B8%AA%E6%96%87%E4%BB%B6%E5%90%8D%E8%80%8C%E4%B8%8D%E9%87%8D%E5%91%BD%E5%90%8D.png)
我有近 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"