免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 7562 | 回复: 14

[新手入门] 批量创建下月目录 [复制链接]

论坛徽章:
0
发表于 2008-08-29 10:44 |显示全部楼层
10可用积分
各位大侠,有谁知道怎么在这个月的月底自动批量创建下个月每天目录的脚本?

比如说:8月30号,在crontab里自动执行一个shell,创建从20080901到20080930的目录

论坛徽章:
0
发表于 2008-08-29 18:16 |显示全部楼层
#! /usr/bin/perl

use HTTP:ate ;

$time = time( ) ; #取当前时间
$time = str2time( "2008-1-1" ) ; #设定时间

$prevmonth = 0 ;

while( 1 ) {

( $a , $b , $c , $day , $month , $year ) = localtime( $time )  ;
$year += 1900 ;
$month ++ ;

//到下个月第一天就退出
if ( $pervmonth != 0 && $pervmonth != $month ) {
        last ;
}

$dir = sprintf( "%s" , $year * 10000 + $month * 100 + $day  ) ;
printf ( "create dir %s\n" , $dir ) ;
mkdir( $dir ) ;


$pervmonth = $month ;
$time += 3600 * 24 ;  //加上一天

}

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
发表于 2008-08-29 19:49 |显示全部楼层
每月一号的0点执行这个:
for i in `cal | xargs | awk -F't' '{print $NF}'`;do
  typeset -Z2 i
  echo `date +%Y%m`$i
done

如果执行没问题,echo换成mkdir

论坛徽章:
0
发表于 2008-08-30 12:51 |显示全部楼层
不得不顶 马老师

论坛徽章:
0
发表于 2008-08-30 15:39 |显示全部楼层
原帖由 beginner-bj 于 2008-8-29 19:49 发表
每月一号的0点执行这个:
for i in `cal | xargs | awk -F't' '{print $NF}'`;do
  typeset -Z2 i
  echo `date +%Y%m`$i
done

如果执行没问题,echo换成mkdir

学习了

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

论坛徽章:
0
发表于 2008-08-31 05:36 |显示全部楼层
不好意思,我写错了,还需要加上xargs 。
cal | xargs | awk 'BEGIN{RS=" " ; "date '+%Y%m'" | getline a } /[0-9]/ && length<=2 {printf ( "mkdir %d%02d\n",a , $NF) }'

论坛徽章:
0
发表于 2008-08-31 06:41 |显示全部楼层
想了想还有更简单的办法。
cal | xargs -n1 echo `date +"%Y%m"` | awk '$2<=31 {printf "%s%02d\n",$1,$2}' | xargs mkdir

论坛徽章:
0
发表于 2008-08-31 07:25 |显示全部楼层
如果不想用awk,还可以用
cal | sed -n '3,20p' |  xargs -n1 expr `date +%Y%m` \* 100 + | xargs mkdir

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
发表于 2008-08-31 08:40 |显示全部楼层
楼上的PERL及SHELL SCRIPT的功力,的确令人佩服!

TO:楼主
简单的说,这个问题虽然方法很多,但最简单的思路只有一个——就是用cal命令,其次就是如何将1-9变成01-09,最后再利用循环(for、while、until、xargs也可以认为是一种循环的变体)完成。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP