seq与批量建文件或文件夹

2013年8月13日 发表评论 阅读评论

1、简单需求

新建test1--test5五个文件夹

mkdir test{1..5}

2、拓展

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

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

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

同理使用printf和awk 的方法为:

printf 'test%03dn' {1..10} | xargs mkdir  或 mkdir `printf 'test%03d ' {1..10}`
awk '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语句套用,具体如下:for i in `seq -f '%02g' 1 20`; do XXX ;done 。同样,明白了原理,上面的方法不仅仅可以同 mkdir和touch使用,也可以同rm 、del等命令配合使用。




本站的发展离不开您的资助,金额随意,欢迎来赏!

You can donate through PayPal.
My paypal id: itybku@139.com
Paypal page: https://www.paypal.me/361way

分类: Linux/unix/mac 标签: ,
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.