免费注册 查看新帖 |

Chinaunix

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

[文件目录] [求助]检查所有子目录是否存在今天创建的文件,并将不存在的子目录输出到文件 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-03-28 14:56 |只看该作者 |倒序浏览
先说下我现在的情况:
公司有一个ftp服务器,分配了N个账户,每个账户有一个对应的子目录,要求这N个账户每天必须上传他们自己的数据文件。
现在是靠人工,每个子目录用眼睛看有没有上传文件,没有的就挨个记录通知他们及时上传。
就我的感觉,重复的问题应该让电脑自动完成……

下面说下我的需求:
1、假设  /var/ftp目录下有10个子目录,分别为:/var/ftp/1、/var/ftp/2……/var/ftp/10,
2、查找满足以下条件的子目录:子目录里面不存在今天创建的文件
3、假设/var/ftp/5和/var/ftp/7这两个子目录,检查了目录下面的所有文件,发现没有今天新创建的文件,就把目录路径:
/var/ftp/5、/var/ftp/7写入文本文件:/root/check.txt:
4、这样,我只要每天运行一下这个脚本,然后打开check.txt这个文件,就可以知道哪些子目录里面今天没有上传文件了,我就可以根据这个去找具体的人了……


请有时间有心情的高手帮帮忙。


鄙人的系统是windows server 2003,目前装了cygwin,在python区有位朋友提供了一个半自动的解决方法:
  1. find  某目录 -type f -ctime -1 >/root/check.txt
复制代码
这样输出的只是所有今天创建的文件……

论坛徽章:
0
2 [报告]
发表于 2013-03-28 16:00 |只看该作者
本帖最后由 pipe55_cu 于 2013-03-28 16:47 编辑
  1. #!/bin/bash
  2. interval_time=1440          #定义的时间间隔,单位为分钟,根据你的需要设定。
  3. result_file=/root/check_file.txt   
  4. temp_file=`mktemp`

  5. check_file_time () {
  6. OLD_LANG=$LANG
  7. export LANG=en_US.UTF-8
  8. file_time1=`ls -lt  $1 |awk '{print $6,$7,$8}'`
  9. file_time2=`date -d  "$file_time1" +%s`
  10. nowtime1=`date +"%Y-%m-%d %H:%M:%S"`
  11. nowtime2=`date -d  "$nowtime1" +%s`
  12. interval=`expr $nowtime2 - $file_time2`
  13. interval_min=`expr $interval / 60`
  14. export LANG=$OLD_LANG
  15. }

  16. for i in /var/ftp/1/* /var/ftp/2/*
  17. do
  18.    check_file_time $i
  19.    if [ $interval_min  -lt $interval_time ];then
  20.        echo ${i%/*} >>$temp_file
  21.    fi
  22. done

  23. awk '!a[$0]++' $temp_file >$result_file
  24. #/bin/rm -rf $temp_file
复制代码

论坛徽章:
0
3 [报告]
发表于 2013-03-28 16:07 |只看该作者
看错了,原来你的是win2003系统,帮不了你了,win平台建议使用 AutoItScript

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
4 [报告]
发表于 2013-03-28 16:12 |只看该作者
  1. #!/bin/bash
  2. find /var/ftp/* -maxdepth 0 -type d > /root/all.txt
  3. find /var/ftp -type f -ctime 0 > /root/check.txt
  4. sed -i 's#/[^/]*$##' /root/check.txt
  5. grep -vxFf check.txt all.txt
复制代码
注:经我亲身验证,应该没问题,但也不能保证没有bug,毕竟对你的目录树不是很了解,只能按我理想的目录树来写了。-ctime 0和-ctime -1的效果是一样的,随你喜欢吧。

论坛徽章:
1
巳蛇
日期:2013-10-28 15:55:33
5 [报告]
发表于 2013-03-28 16:37 |只看该作者
既然可以找出今天修改过的目录,那么用awk分析一下。
先建立一个多维数组保存所有的人,然后发现上传一个就给对应数组赋值,最后显示值为空的项。

论坛徽章:
0
6 [报告]
发表于 2013-03-29 12:07 |只看该作者
谢谢2位热心的朋友!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP