我想知道可以使用哪个命令来重命名这样的文件。
例如,旧文件名是:
0_predict-1-500.png
0_predict-2-500.png
0_predict-3-500.png
1_predict-1-500.png
1_predict-2-500.png
1_predict-3-500.png
2_predict-1-500.png
...so on...
我期望的是用类似 的格式提取它们{filename}_predict-{times}-{rounds}.png
,然后我可以将其替换为另一种模式,例如{filename}.png-result-{times}.png
。
因此,上述文件名将被更改以匹配模式:
0.png-result-1.png
0.png-result-2.png
0.png-result-3.png
1.png-result-1.png
1.png-result-2.png
1.png-result-3.png
2.png-result-1.png
...so on...
有人有 Linux 命令/工具来做这样的事情吗?我不想编写 Python 脚本来完成这个任务。
答案1
我刚刚发现有一个工具可以轻松地在 GNU/Linux 中操作文件名,它是毫米波。这比发布的答案容易得多。
就我而言,
mmv "*_predict-*-*.png" "#1.png-result-#2.png"
它尝试用通配符模式替换每个部分,因此,我们可以使用 、 等重复使用该#1
部分#2
。
答案2
在重命名命令的帮助下,您可以编辑它,我假设所有文件都在同一目录中,并且您想要重命名所有 .png文件.:
find -name \*.png -exec sh -c 'x=$( rename -v 's/_predict/.png-result/g' $0 ) ; rename 's/-500//g' "${x##*\./}" ;' {} \;
在文件所在的目录中运行此命令。
所以基本上它运行两次 rename 命令,第一次是删除_predict
,第二次是删除-500
。
我在这里使用是x=$( rename -v 's/_predict/.png-result/g' $0 )
因为在第一次更改文件名后,我将这个新名称存储在变量中x
,然后使用该值进行第二次修改。
使用命令rename 's/-500//g' "${x##*\./}" ;
是因为 x 的值就像这样./0_predict-1-500.png renamed as ./0.png-result-1-500.png
,所以我只想0.png-result-1-500.png
并且${x##*\./}
会这样做。
答案3
也试试
$ for FN in *.png; do IFS="_-." read F P T R X <<< "$FN"; echo mv "$FN" "$F.$X-result-$T.$X"; done
mv 0_predict-1-500.png 0.png-result-1.png
mv 0_predict-2-500.png 0.png-result-2.png
mv 0_predict-3-500.png 0.png-result-3.png
mv 1_predict-1-500.png 1.png-result-1.png
mv 1_predict-2-500.png 1.png-result-2.png
mv 1_predict-3-500.png 1.png-result-3.png
mv 2_predict-1-500.png 2.png-result-1.png
echo
如果对结果满意,则删除。我们循环遍历目标文件、read
使用改编变量和“此处字符串”的文件名组件IFS
,然后重新组装组件以形成命令所需的最终文件名mv
。
答案4
提及文件中需要重命名的所有文件
awk '{print "mv -v" " " $1 " " substr($1,1,1)".png-result-"substr($1,11,1)".png"}' filename |sh
I have mentioned -v for verbose mode
This is how it shows output for renaming
awk '{print "mv -v" " " $1 " " substr($1,1,1)".png-result-"substr($1,11,1)".png"}' filename|sh
`0_predict-1-500.png' -> `0.png-result-1.png'
`0_predict-2-500.png' -> `0.png-result-2.png'
`0_predict-3-500.png' -> `0.png-result-3.png'
`1_predict-1-500.png' -> `1.png-result-1.png'
`1_predict-2-500.png' -> `1.png-result-2.png'
`1_predict-3-500.png' -> `1.png-result-3.png'
`2_predict-1-500.png' -> `2.png-result-1.png'