免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 6886 | 回复: 6
打印 上一主题 下一主题

[文件目录] 用shell实现创建指定文件夹 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-12-18 16:28 |只看该作者 |倒序浏览
需求:用shell实现创建目录,一年中12个月,创建12个文件夹,再在这12个文件中分别创建以每个月份多少的天的文件夹,即是:1的文件夹下有31个文件夹,2的文件夹下有29个文件夹。。。。。。。等大牛各位帮解答下,谢谢!

论坛徽章:
0
2 [报告]
发表于 2012-12-18 16:44 |只看该作者
本帖最后由 jomenxiao 于 2012-12-18 16:59 编辑

for a  in $(seq 365)
do
       mkdir  -p   $(date -d "${a} days ago" +%m)/$(date  -d "${a} days ago" +%m%d)
done

回复 1# linuxbrook


   

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
3 [报告]
发表于 2012-12-18 19:25 |只看该作者
2的文件夹下有29个文件夹

不管是否闰年都是29个?

论坛徽章:
0
4 [报告]
发表于 2012-12-19 11:29 |只看该作者
本帖最后由 ljwd1000 于 2012-12-19 11:31 编辑
  1. #!/bin/bash

  2. BigMonth=($(seq 1 31))
  3. SmallMonth=($(seq 1 30))

  4. TargetDir="/tmp/test"

  5. echo "Please Input Year:"
  6. read year
  7. mode=$(($year%4))
  8. if [ $mode -eq 0 ];then
  9.     Feb=($(seq 1 29))
  10. else
  11.     Feb=($(seq 1 28))
  12. fi

  13. for i in 1 3 5 7 8 10 12
  14. do
  15.     for j in ${BigMonth[@]}
  16.     do
  17.         mkdir -p $TargetDir/$i/$j
  18.     done
  19. done

  20. for i in 4 6 9 11
  21. do
  22.     for j in ${SmallMonth[@]}
  23.     do
  24.         mkdir -p $TargetDir/$i/$j
  25.     done
  26. done

  27. for i in ${Feb[@]}
  28. do
  29.     mkdir -p $TargetDir/2/$i
  30. done
复制代码

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
5 [报告]
发表于 2012-12-19 13:16 |只看该作者
本帖最后由 jason680 于 2012-12-19 13:19 编辑

回复 1# linuxbrook

How about this

mkdir -p {1..12}/{1..31}
   
maybe you don't want to have 31 on 2,4,6,9,11 months and 2/30

rm -rf {2,4,6,9,11}/31 2/30

论坛徽章:
0
6 [报告]
发表于 2012-12-19 18:24 |只看该作者
回复 1# linuxbrook

#!/bin/bash
year=${1:-2012}
for mon in {1..12}
do
  mkdir -p $(cal $mon $year | sed -r -e '/[a-zA-Z]/d' -e '/./{H;$!d;}' -e "{x;s/([0-9]{1,2})/$mon\/\1/g;s/\n+/ /g;}")
done

论坛徽章:
0
7 [报告]
发表于 2012-12-19 19:12 |只看该作者
本帖最后由 cuteorange 于 2012-12-19 19:34 编辑

回复 6# cuteorange


    改进一下:
#!/bin/bash
year=${1:-2012}
for mon in {1..12}
do
  mkdir -p $(cal $mon 2012 | sed -r "/[a-z]/d;s/([0-9]{1,2})/$mon\/\1/g")
done
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP