删除超过 X 分钟的文件

删除超过 X 分钟的文件

我想将创建时间超过 15 分钟的文件和目录移动到 HP Unix 中的存档文件夹,但我没有找到任何选项。我为它创建了一个 Perl 脚本,但它只移动文件而不移动目录。

#!/usr/bin/perl
use strict;
use warnings;
use File::Find;
use File::Copy;
my $dstdir = '/tmp/test14';
@ARGV = ("/tmp/test11/") unless @ARGV;
print STDERR "Begin @ ", scalar localtime, "\n";
find(
    sub {
        if ( -f $_ && -M _ >= 1/96 ) {
            print STDERR "Moving '$_'\n";
            move( $File::Find::name, $dstdir ) or die "$!\n";
        }
    },
    @ARGV );
print STDERR "Ended @ ", scalar localtime, "\n";
1;

输入:

/tmp/test11# ll
drwxrwxrwx   2 root       sys             96 Mar 14 21:46 hello
drwxrwxrwx   2 root       sys             96 Mar 14 21:46 hello1
-rw-rw-rw-   1 root       sys              0 Mar 14 22:03 hello3

输出:

/tmp/test14# ll
-rw-rw-rw-   1 root       sys              0 Mar 14 22:03 hello3

答案1

简单地使用 GNUfind命令(如果支持):

find . -type f -mmin +30 -delete

由于您的状况发生了变化,因此更新版本如下:

find . -type f -cmin +15 -delete

答案2

我无法访问 HP-UX,但在 Solaris 或任何 BSD 系统(即不使用 GNU find)上,以下内容可以工作:

find . -type f -cmin +15 -print -exec rm {} +

这将找到当前目录中或当前目录下的所有常规文件,其上次 inode 状态更改时间超过 15 分钟前。将显示这些文件的路径名,然后文件将被删除。

为了能够在删除任何内容之前进行交互式确认,请使用

find . -type f -cmin +15 -print -ok rm {} ';'

大多数 Unix 文件系统不跟踪文件创建时间。 will-cmin的谓词find测试时间文件的“更改时间”,即 inode 的“更改时间”。如果文件的索引节点自创建以来没有更改,那么这将是其“创建时间”。这时间时间戳会在文件创建以及所有权或权限修改时更新。文件内容的修改也会更新此时间戳。

相关内容