Chinaunix

标题: [原创]shell脚本创建多层目录 [打印本页]

作者: accepting    时间: 2008-01-07 15:23
标题: [原创]shell脚本创建多层目录

  1. #!/bin/bash
  2. for file in a b c d e f g h i j k r l m n o p q l s t y u v w x z
  3. do
  4.     mkdir /var/spool/mail/$file
  5.     for file in a b c d e f g h i j k r l m n o p q l s t y u v w x z
  6.     do
  7.         cd /var/spool/mail/$file
  8.         for file in a b c d e f g h i j k r l m n o p q l s t y u v w x z
  9.         do
  10.             mkdir $file
  11.         done
  12.         cd ..
  13.     done
  14. done
复制代码


这是我为了方便在创建多层相同目录写的脚本,请高手不要见笑!

[ 本帖最后由 accepting 于 2008-1-7 15:32 编辑 ]
作者: MMMIX    时间: 2008-01-07 18:14
不够灵活。

BTW,许多 mkdir 都支持 -p 参数的(递归创建多级目录)。
作者: accepting    时间: 2008-01-07 21:38
对哦。我怎么没想过用递归的方法呢?哈哈。。。。谢谢版主!!!
作者: ghosTM55    时间: 2008-01-07 21:50
标题: 学习了

作者: gucuiwen    时间: 2008-01-08 12:40
这种需求只需要一条命令就可以完成:

mkdir -p {a..z}/{a..z}
作者: gucuiwen    时间: 2008-01-08 12:46
上面介绍的命令虽然简单,但是有一定的局限性,比如只能建立3~4级目录,再多就会出现argument too long 的错误,而且{a..z}的这种写法,也只有 bash3.0以上才支持。下面是一种比较通用的,建立任意多级别目录的方法:(程序里是5级目录,可以修改一下,建立任意多级,但是6级以上目录建立时间就N长了,可能要等半个多小时。
#!/bin/bash


mk5dirs()
{
  local level=$1
#  echo "level is $level"

  if [ $level -eq 0 ];then
    return 0
  fi

  for i in `seq -w 5`
  do
   mkdir -p $i
   cd $i
   mk5dirs $[$level-1]
   cd ..
  done
}

mk5dirs 5

作者: gucuiwen    时间: 2008-01-08 12:48
对应的python代码,是以字符作为目录名的,而不是数字:

#!/usr/bin/env python


import os
from random import choice
import string

l=string.ascii_letters

def mk5dirs(level):
  if level == 0:
    return
  for i in xrange(5):
    dirName="".join([choice(l) for k in xrange(8)])
    #os.mkdir(str(i))

    os.mkdir(dirName)
    #os.chdir(str(i))

    os.chdir(dirName)
    mk5dirs(level-1)
    os.chdir("..")

mk5dirs(6)





欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2