是否可以将文件名输出的变量部分设置为特定长度,并用零填充多余的空格。
我希望为其他用户订购商品,因此我希望
curl http://example.com/[1-12]/file_name[1-50].kmz -o file_name-#1-#2.kmz'
看起来像
文件名-01-01.kmz或者文件名-12-50.kmz
而不是
文件名-1-1.kmz和文件名-12-50.kmz
答案1
只需用前导零填充格式即可。因此,对于您的示例,请执行以下操作:
curl http://example.com/[01-12]/file_name[01-50].kmz -o file_name-#1-#2.kmz'
答案2
有很多方法。你可以使用Bash 括号扩展以一种巧妙的方式生成零填充文件名,但很快就会变得复杂。更简单的方法是在下载文件后批量重命名,例如使用脚本prename
,该脚本在安装 Perl 后至少在基于 Debian 的发行版中可用。
此prename
命令将对三位数进行零填充(将 {3} 更改为另一个数字以更改零填充。确保第一个表达式中的第二个斜杠后有 >{n-1} 个零):
$ ls
file_name-1-1.kmz file_name-12-112.kmz file_name-12-50.kmz file_name-140-88.kmz
$ prename -v 's/([0-9]+)/00$1/g; s/0+([0-9]{3})/$1/g' *
file_name-1-1.kmz renamed as file_name-001-001.kmz
file_name-12-112.kmz renamed as file_name-012-112.kmz
file_name-12-50.kmz renamed as file_name-012-050.kmz
file_name-140-88.kmz renamed as file_name-140-088.kmz
首次运行prename -n
即可直观地检查重命名而不做任何更改。检查man prename
。
重命名表达式的工作原理是,首先用 n-1 个零填充所有数字,然后删除尽可能多的零,以使所有数字都剩下 n 位数字。它不会截断信息,这很好。
浮点数不在上述范围内处理(例如file_name-12.7-112.97.kmz
),但可以很容易地用
s/([^\.0-9])([0-9]+)/${1}00$2/g; s/0+([0-9]{3})/$1/g
但是更通用的版本也更难以辨认:-)(并且可能有其自己的错误;如果不需要浮点数,请使用早期版本)。
(prename
实际上与rename
大多数系统一样是链接的。)