![如何重新格式化目录名称?](https://linux22.com/image/98852/%E5%A6%82%E4%BD%95%E9%87%8D%E6%96%B0%E6%A0%BC%E5%BC%8F%E5%8C%96%E7%9B%AE%E5%BD%95%E5%90%8D%E7%A7%B0%EF%BC%9F.png)
我有许多目录,名称如下
geom1 geom10 geom11 geom12 geom13 geom14 geom15 geom16 geom17 geom18 geom19 geom2 geom20 geom3 geom4 geom5 geom6 geom7 geom8 geom9
我想将它们重命名为这样
geom0000001 geom0000002 geom0000003 geom0000004 geom0000005 geom0000006 geom0000007 geom0000008 geom0000009 geom0000010 geom0000011 geom0000012 geom0000013 geom0000014 geom0000015 geom0000016 geom0000017 geom0000018 geom0000019 geom0000020
我使用了以下脚本
a=1 for
i in geom*/; do
new=$(printf "geom%07d" "$a")
mv -- "$i" "$new"
let a=a+1
done
问题,例如,它移动到geom10
“ geom0000002
不”, 同时geom0000002
移动到“不”geom2
geom0000012
geom0000002
我想要的是使用相同的顺序但使用新的格式重命名目录。
答案1
尝试
for i in geom*
do
new=$(printf "geom%07d" "${i##geom}")
echo "$i" "$new"
done
在哪里
##geom
构造将从 var 中删除 geom。- 如果满意则替换
echo
为mv
答案2
这不是推荐的解决方案,但它确实有效。我建议您仅在上述特定情况下使用它。不建议循环ls
结果。如果您有其他文件夹名称,或者您想在更一般的情况下使用它,那么您应该寻找其他解决方案。
for i in geom*; do
nr=$(echo $i | cut -d'm' -f2);
#printf "geom%07d" "$nr";
mv "${i}" "$(printf "geom%07d" "$nr")"
done