Chinaunix

标题: 求指教 如何用find实现操作指定日期的的文件 [打印本页]

作者: alexyuan881    时间: 2012-11-10 13:55
标题: 求指教 如何用find实现操作指定日期的的文件
如何用find实现操作指定日期的的文件
  比如说   我要实现从a文件夹中找出昨天产生的txt文档复制到b文件夹中

作者: alexyuan881    时间: 2012-11-10 18:04
其他可以实现的行
就是要实现对指定日期文件的操作   比如 每天备份前一天产生的数据文件   
作者: alexyuan881    时间: 2012-11-11 21:14
怎么没人气啊   自己顶下
作者: gaoyang636    时间: 2012-11-12 09:08
不需要用Perl吧,用shell就搞定了
作者: kk861123    时间: 2012-11-12 09:39
  1. use File::Find;
复制代码

作者: alexyuan881    时间: 2012-11-12 20:55
回复 4# gaoyang636
给点提示  大神


   
作者: alexyuan881    时间: 2012-11-12 21:14
回复 5# kk861123
能具体点吗??


   
作者: kk861123    时间: 2012-11-13 08:50
回复 7# alexyuan881


    怎么具体?一个find就可以搞定的,你哪里实现不了呢?
作者: laputa73    时间: 2012-11-13 11:48
本帖最后由 laputa73 于 2012-11-13 11:48 编辑

删除指定目录下n天前的文件
find /var/mail/* -type f -mtime +$daynum -exec rm {} \;
其他的类似
作者: alexyuan881    时间: 2012-11-26 20:40
回复 9# laputa73
想问下  如果是对文件夹呢   找出一个目录下最近3天产生的文件夹 ,注意是文件夹  不是文件


   
作者: laputa73    时间: 2012-11-27 08:50
你可以man 一下find,对type的说明
    -type c             True if the type of the file is c, where
                         c is b, c, d, D, f, l, p, or s for block

                         special file,  character  special  file,
                         directory,  door,  plain  file, symbolic
                         link,  fifo  (named  pipe),  or  socket,
                         respectively.

d代表目录,f代表文件
如果你要删除目录,后面的rm要修改为rm -rf (以防目录非空)
作者: xi0ws    时间: 2012-11-27 13:45
本帖最后由 xi0ws 于 2012-11-27 13:46 编辑
  1. #!usr/bin/perl
  2. use strict;
  3. use File::Find;
  4. use File::Copy;

  5. my $start_folder= ''; #starting folder
  6. my $bak = ''; #backup folder

  7. find(sub{copy ("$start_folder\\$_", $bak), if $_ =~ /\.txt$/ && -C $_ > 1 && -C $_ < 2;}, $start_folder);
复制代码

作者: alexyuan881    时间: 2012-11-27 19:25
回复 12# xi0ws
谢谢  受益良多   
顺便问下   如果是对文件夹呢   比如说 我现在有个目录每天会产生很多文件夹  我如何才能找出规定日期产生的文件夹  比如找出今天产生的文件夹  输出文件夹的名称


   
作者: xi0ws    时间: 2012-11-28 14:13
本帖最后由 xi0ws 于 2012-11-28 14:16 编辑

回复 13# alexyuan881

"-C"貌似也能处理文件夹的情况,你试试
严格来说我的那段代码有问提,不能处理$root有子文件夹的情况,建议使用 use File::Basename;
  1. #!usr/bin/perl
  2. use strict;
  3. use warnings;

  4. use File::Find;
  5. use File::Basename;

  6. my $root = ''; #root folder
  7. find(sub
  8.      {
  9.         my $file = $File::Find::name;
  10.         return unless -d $file;
  11.         print "$file\n" if -C _ > 0 && -C _ < 1;},
  12.         $root);
复制代码





欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2