查找 X 分钟前创建的文件(没有 GNU/BSD 查找)

查找 X 分钟前创建的文件(没有 GNU/BSD 查找)

我正在使用该find命令查找 30 分钟内创建的文件。

find . -ctime -30m

但它最多会提供 30 天的文件。我也尝试过,-mmin但它表明这-mmin不是一个有效的选项。

find我的命令有什么问题吗?

的输出uname -rsAIX 2.

答案1

AIXfind缺乏良好的 GNU 功能。

您可以轻松解决这个问题。创建两个带有标记感兴趣边界的时间戳的“参考”文件:

touch -amt 201407251200 myref1
touch -amt 201407251230 myref2

现在做:

find . -type f \( -newer myref1 -a ! -newer myref2 \) -exec ls -ld {} +

这引用文件的mtime时间或修改时间。如果没有对其进行进一步的修改(写入),这将是文件的创建时间戳,否则它将代表上次对文件进行更改的时间数据。对于目录,mtime当添加新对象或删除旧对象时, 会更新。经典 Unix/Linux 缺乏真正的创建时间戳,尽管这是在某些平台上实现的(并且可用于检索)。 (进一步参见这里。 MAC OS 用户可以使用“ls -lU”来获取它。

不要ctime与“创造”混淆。 stat ctime() 结构的 代表 inode 更改的最后时间戳(即权限、所有权和对象名称)。

答案2

来补充@JR弗格森的回答

要获取修改时间为过去30分钟的参考文件,可以进行可移植的操作(精度为一秒):

TZ=ZZZ0 touch -t "$(TZ=ZZZ0:30 date +%Y%m%d%H%M.%S)" /some/ref/file

然后执行以下操作:

find . -newer /some/ref/file

这只适用于 50 小时的间隔:

TZ=ZZZ-24:59:59 touch -t "$(TZ=ZZZ24:59:59 date +%Y%m%d%H%M.%S)" file

这是您可以使用该方法以可移植方式(POSIXly)获取的最旧的文件。

答案3

你应该使用-cmin.从man的页面find

   -cmin n
          File’s status was last changed n minutes ago.

   -ctime n
          File’s status was last changed n*24 hours ago.  See the comments for -atime to understand how rounding affects the  interpreta-
          tion of file status change times.

答案4

您可以使用perl

#! /usr/bin/perl

use strict;
use warnings;
use File::Find ();
use File::stat;

use vars qw(*name);
*name   = *File::Find::name;
my $now = time;

File::Find::find({wanted => \&wanted}, '.');

sub wanted {
    print "$name\n" if stat($_)->mtime > ($now - 30*60)
                    and $name ne ".";
}

除了OSXFreeBSD(使用ls -U),您无法获取文件的创建日期。

如果您在ext2/3/4文件系统上,则可以使用调试文件获取文件的创建日期。

相关内容