免费注册 查看新帖 |

Chinaunix

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

[求助]按指定日期遍历子目录下的文件,将目录名输出到一个文本文件 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-03-28 09:27 |只看该作者 |倒序浏览
公司里面有一个FTP,里面有N多目录,每个人一个目录,其中有30多个,要求他们每天上传一个指定的数据文件。
现在都是手工一个一个打开,看他们每天上传了没有……

这么重复的事情,我就想让电脑做,第一时间想到脚本,结果,google遍了,都是只有遍历文件……本人完全不懂脚本,也不能根据这些遍历文件修改参考成符合自己要求的。
我是这么想的:
0、获取当前日期,如:20130328,
1、首先进入一个子目录
2、获取这个目录下面所有文件的创建日期,格式化成20130328的格式,并把这些日期存到一个数组里面
3、判断:在第2步里面的数组查找,查找到有今天日期的,pass掉,查找不到的,把该子目录名写入到文本文件
4、重复循环,直到所有子目录都循环结束。
5、这样就得到第三步的文本文件,里面就是哪些子目录没有今天创建的文件,也就达到我的目的了:
检查哪些人今天没有上传文件

我的思路可能不是最好的,但目的只有一个:找到今天没有上传文件的人,实际就是某个子目录里面没有一个文件是今天创建的


哪位高人有时间有心情,帮忙奉献一个吧,可以帮助我脱离手工工作……
perl或python都行,因为这两个可以在windows下安装使用。

论坛徽章:
3
CU十二周年纪念徽章
日期:2013-10-24 15:41:34子鼠
日期:2013-12-14 14:57:19射手座
日期:2014-04-25 21:23:23
2 [报告]
发表于 2013-03-28 10:45 |只看该作者
给你思路:
1.获取当前时间用POSIX qw(strftime)  来格式化所需要的时间。
2.获取文件修改的时间。有两种方案。。第一个用stat,第二种用map{-M,$_}glob "*" 返回是具体修改天数。这里你可以判断是否<0,则为当天修改的。
3.得到上面的信息 下面就根据你的需求做了{:3_186:}

论坛徽章:
0
3 [报告]
发表于 2013-03-29 15:23 |只看该作者
本帖最后由 afukada 于 2013-03-29 16:03 编辑
  1. use Net::FTP;

  2. %mon2num=("Jan"=>1,"Feb"=>2,"Mar"=>3,"Apr"=>4,
  3.           "May"=>5,"Jun"=>6,"Jul"=>7,"Aug"=>8,
  4.           "Seq"=>9,"Oct"=>10,"Nov"=>11,"Dec"=>12);

  5. @dcdirA=();#輸入需要遍歷的所有子目錄名

  6. #獲取當前時間
  7. ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime(time);

  8. #Query FTP site
  9. $site="";#在""中間輸入FTP site
  10. $username="";#在""中間輸入User name
  11. $password="";#在""中間輸入Password
  12. $ftp=Net::FTP->new($site,Timeout=>30) or die "Could not connect.\n";
  13. $ftp->login($username,$password) or die "Could not login.\n";
  14. $cdir="";#在""中間可以輸入子目錄名,如果要遍歷的子目錄就在主目錄下則不需要
  15. $ftp->cwd($cdir);#進入子目錄中,目錄下為要遍歷的所有子目錄

  16. foreach $dcdir(@dcdirA)
  17. {
  18.         $ftp->cwd($dcdir);#進入子目錄中,搜尋檔案
  19.         @array=$ftp->dir;#列出子目錄下所有目錄和檔案,並存入一個array中
  20.         $check=0;#定義檢查值為0
  21.        
  22.         for(@array)
  23.         {
  24.                 #(-rw-r--r--   1 ftpuser  ftpusers  2894033 Jul  7  2006 ls-lR.Z) <-()內是array每一個element的內容
  25.                 #(-rwxrwxr--   1 ftpuser  ftpusers      153 Jan 16 13:13 update-sym-links) <-這是今年1月26有更新的檔案,會發現年的那一個部份變成時間
  26.                 ($f_competence,$f_ndir,$f_user,$f_group,$f_size,$f_mon,$f_mday,$f_yearortime,$f_name)=split(/\s+/);
  27.                 $check++ if($f_yearortime=~/:/ && $mon2num{$f_mon}==$mon+1 && $f_mday==mday);#如果有上傳就讓檢查值加1
  28.         }
  29.        
  30.         push(@nuUser,$dcdir) if($check==0);#如果檢查值為0表示使用者沒有上傳任何檔案
  31. }

  32. $ftp->quit;

  33. print $_,"\n" for(@nuUser);#將為上傳檔案的使用者輸出
复制代码
裡面有一些部份需要你自己填,

還有我不是很確定是不是在每個平台的FTP都是相同的結果

所以有問題再提出來吧:wink:

论坛徽章:
0
4 [报告]
发表于 2013-03-29 15:51 |只看该作者
Sorry~

剛剛的腳本有一些小問題

已經重新更新了

麻煩你再試試
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP