![Bash 脚本我需要在 Bash 中重命名文件,因此文件名的第一部分被移动到文件名的最后一部分](https://linux22.com/image/1559505/Bash%20%E8%84%9A%E6%9C%AC%E6%88%91%E9%9C%80%E8%A6%81%E5%9C%A8%20Bash%20%E4%B8%AD%E9%87%8D%E5%91%BD%E5%90%8D%E6%96%87%E4%BB%B6%EF%BC%8C%E5%9B%A0%E6%AD%A4%E6%96%87%E4%BB%B6%E5%90%8D%E7%9A%84%E7%AC%AC%E4%B8%80%E9%83%A8%E5%88%86%E8%A2%AB%E7%A7%BB%E5%8A%A8%E5%88%B0%E6%96%87%E4%BB%B6%E5%90%8D%E7%9A%84%E6%9C%80%E5%90%8E%E4%B8%80%E9%83%A8%E5%88%86.png)
这里以其中一个文件名为例。
2017-11-09-23.00.19-CookingDoughnuts.txt
重命名为
CookingDoughnuts-2017-11-09-23.00.19.txt
我需要对 1000 个文件进行批量操作,所以这是一个脚本,我遇到的问题是实际的重命名位。但如果它使发布解决方案更容易,可以提供完整的脚本。
我可以说每个文件的日期格式都相同,因此第四个破折号符号始终是文件名第一部分和第二部分的分隔符。但实际日期和时间会有所不同,文件名的文本部分也会有所不同。
不需要在新文件名中重写完整的日期和时间戳,因此在此示例中,以下内容就可以了。
CookingDoughnuts-2017-11-09-00.00.00.txt
小时、分钟、秒可以全部为00,但日期必须完整。
答案1
fname="2017-11-09-23.00.19-CookingDoughnuts.txt"
ext="${fname##*.}"
name="${fname%.*}"
pref="${name#*-*-*-*-}"
suff="${name%-$pref}"
newfname="$pref-$suff.$ext"
echo "$newfname"