![重命名小数点后数字相同的多个文件](https://linux22.com/image/931397/%E9%87%8D%E5%91%BD%E5%90%8D%E5%B0%8F%E6%95%B0%E7%82%B9%E5%90%8E%E6%95%B0%E5%AD%97%E7%9B%B8%E5%90%8C%E7%9A%84%E5%A4%9A%E4%B8%AA%E6%96%87%E4%BB%B6.png)
我有多个文件,名称分别为 vort-0.01.txt、vort-0.02.txt、...
vort-0.1.txt...vort-0.2.txt...等等。
我想用两个小数点重命名每个文件,即将 vort-0.1.txt 的名称更改为 vort-0.10.txt,并保持 vort-0.01.txt 不变。
我如何使用 bash 脚本来做到这一点?
感谢您的帮助。
答案1
使用基于 perl 的rename
命令,然后给出
$ ls vort*.txt
vort-0.001.txt vort-0.01.txt vort-0.1.txt vort-0.2.txt
然后
rename -n 's/(\d+\.\d+)/sprintf "%.2f", $1/e' vort*.txt
将在任何地方强制使用 2 位精度,因为
rename(vort-0.001.txt, vort-0.00.txt)
rename(vort-0.1.txt, vort-0.10.txt)
rename(vort-0.2.txt, vort-0.20.txt)
如果你想重命名为最低限度精度即只修改当前具有个位数精度的文件名,然后
$ rename -n 's/(\d+\.\d)(?=\D)/sprintf "%.2f", $1/e' vort*.txt
rename(vort-0.1.txt, vort-0.10.txt)
rename(vort-0.2.txt, vort-0.20.txt)
-n
一旦您确认它正在做正确的事情,就将其删除。
要单独使用 bash shell 操作来做同样的事情,
for f in vort-?.?.txt; do
base=${f%.txt}
printf -v newname 'vort-%.2f.txt' "${base#vort-}"
echo mv -- "$f" "$newname"
done
这里,删除echo
之后的测试。