1、简单需求

新建test1--test5五个文件夹 mkdir test{1..5}

2、拓展

以上是最简单的写法,不过当有格式要求时,上面的方法就不妥了。比如,想要建test001--test010 ,即,后面的数字保持三位的精度时,再用这样的通配就不灵了。这时候可以使用seq 、printf或awk 。具体如下

1seq -f 'test%03g' 1 10 | xargs mkdir
23mkdir $(seq -f 'test%03g' 1 10)

-f 参数是用来格式化输出 。注意,百分号后面的 0 一定不能取消,后面的 3 代表精度位 。另外,seq还有一个参数-s ,就来指定输出的分隔符,默认是n --即换行 。例如:需要在一行中用空格输入1到10就可以写为:seq -s ' ' 1 10 。同理使用printf和awk 的方法为:

1printf 'test%03dn' {1..10} | xargs mkdir  或 mkdir `printf 'test%03d ' {1..10}`
2awk 'BEGIN { while (num < 10 ) printf  "test%03dn", ++num ; exit}' | xargs mkdir

3、反思

最初想到新建几个文件时,尝试的第一个用法是 mkdir test[0-9] ,显然我把通配符和正则的概念搞混了。关于两者之间的区别可以总结为一句话:

通配符(出现在argument位置)由shell负责解释(与现有的文件名匹配),与具体的命令(ls,rm,mkdir)无关.正则表达式(出现在option位置上)由具体的应用程序解释(grep,sed,awk),与shell无关。

本文提到的较多的就是seq的用法,seq也经常和for语句套用,具体如下:

1for i in `seq -f '%02g' 1 20`; do XXX ;done

同样,明白了原理,上面的方法不仅仅可以同 mkdir和touch使用,也可以同rm 、del等命令配合使用。