命令行 curl - 文件命名 example.com/[1-10].txt => 01.txt 到 10.txt

命令行 curl - 文件命名 example.com/[1-10].txt => 01.txt 到 10.txt

是否可以将文件名输出的变量部分设置为特定长度,并用零填充多余的空格。

我希望为其他用户订购商品,因此我希望

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大多数系统一样是链接的。)

相关内容