免费注册 查看新帖 |

Chinaunix

广告
  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 6609 | 回复: 11
打印 上一主题 下一主题

批量创建下月目录 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-08-29 10:44 |只看该作者 |倒序浏览
各位大侠,有谁知道怎么在这个月的月底自动批量创建下个月每天目录的脚本?\r\n\r\n比如说:8月30号,在crontab里自动执行一个shell,创建从20080901到20080930的目录

论坛徽章:
0
2 [报告]
发表于 2008-08-29 18:16 |只看该作者
#! /usr/bin/perl\r\n\r\nuse HTTP:ate ; \r\n\r\n$time = time( ) ; #取当前时间\r\n$time = str2time( \"2008-1-1\" ) ; #设定时间\r\n\r\n$prevmonth = 0 ; \r\n\r\nwhile( 1 ) {\r\n \r\n( $a , $b , $c , $day , $month , $year ) = localtime( $time )  ; \r\n$year += 1900 ; \r\n$month ++ ; \r\n\r\n//到下个月第一天就退出\r\nif ( $pervmonth != 0 && $pervmonth != $month ) {\r\n        last ; \r\n}\r\n\r\n$dir = sprintf( \"%s\" , $year * 10000 + $month * 100 + $day  ) ; \r\nprintf ( \"create dir %s\\n\" , $dir ) ;\r\nmkdir( $dir ) ;\r\n\r\n\r\n$pervmonth = $month ; \r\n$time += 3600 * 24 ;  //加上一天\r\n\r\n}

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
3 [报告]
发表于 2008-08-29 19:49 |只看该作者
每月一号的0点执行这个:\r\nfor i in `cal | xargs | awk -F\'t\' \'{print $NF}\'`;do\r\n  typeset -Z2 i\r\n  echo `date +%Y%m`$i\r\ndone\r\n\r\n如果执行没问题,echo换成mkdir

论坛徽章:
0
4 [报告]
发表于 2008-08-30 12:51 |只看该作者
不得不顶 马老师

论坛徽章:
0
5 [报告]
发表于 2008-08-31 04:41 |只看该作者
使用cal输出的话还可以一句话搞定。\r\ncal | awk \'BEGIN{RS=\" \" ; \"date \'+%Y%m\'\" | getline a } /[0-9]/ && length<=2 {printf ( \"mkdir %d%02d\\n\",a , $NF) }\' \r\n返回\r\nmkdir 200801\r\nmkdir 200802\r\n...\r\nmkdir 200831\r\n结果正确的话,可以再加 | sh 来执行

论坛徽章:
0
6 [报告]
发表于 2008-08-31 05:36 |只看该作者
不好意思,我写错了,还需要加上xargs 。\r\ncal | xargs | awk \'BEGIN{RS=\" \" ; \"date \'+%Y%m\'\" | getline a } /[0-9]/ && length<=2 {printf ( \"mkdir %d%02d\\n\",a , $NF) }\'

论坛徽章:
0
7 [报告]
发表于 2008-08-31 06:41 |只看该作者
想了想还有更简单的办法。\r\ncal | xargs -n1 echo `date +\"%Y%m\"` | awk \'$2<=31 {printf \"%s%02d\\n\",$1,$2}\' | xargs mkdir

论坛徽章:
0
8 [报告]
发表于 2008-08-31 07:25 |只看该作者
如果不想用awk,还可以用\r\ncal | sed -n \'3,20p\' |  xargs -n1 expr `date +%Y%m` \\* 100 + | xargs mkdir

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
9 [报告]
发表于 2008-08-31 08:40 |只看该作者
楼上的PERL及SHELL SCRIPT的功力,的确令人佩服!\r\n\r\nTO:楼主\r\n简单的说,这个问题虽然方法很多,但最简单的思路只有一个——就是用cal命令,其次就是如何将1-9变成01-09,最后再利用循环(for、while、until、xargs也可以认为是一种循环的变体)完成。

论坛徽章:
0
10 [报告]
发表于 2008-08-31 08:58 |只看该作者
ls的都太强了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP