AIX 以秒为单位查找文件年龄,不使用 -printf 进行查找

AIX 以秒为单位查找文件年龄,不使用 -printf 进行查找

AIX 7.2 希望在 AIX 上重新创建以下内容。

 find /etc -maxdepth 1 -iname "*conf" -type f -mmin +5  -printf '%p;%T@\n' | awk -F ';' -v time="$( date +%s )"  '{ print $1";"$2";" (time-$2 ) }'

/etc/rsyslog.conf;1640302499.0000000000;46381761

conf 文件只是一个示例,用于查找可能超过一定秒数的特定文件列表。可能低至 300 秒,也可能高至 43200 秒或更长。

答案1

如果我必须在 AIX 系统上解决这个问题,我会再次依靠 perl。由于您正在使用-maxdepth 1,因此这里实际上没有必要进入 File::Find 模块。我想出了一个使用两个基本功能的 perl 脚本:

  • glob匹配预期的文件名模式
  • stat提取文件的修改时间

如果脚本发现与模式匹配的文件的最后修改时间早于预期时间,它会以您指定的分号分隔格式打印这些文件。请注意,文件名中允许使用分号(以及换行符和其他空格),因此处理输出时要小心。

#!/usr/bin/perl -w
# prints matching file mtime and age in seconds

use strict;

# expect 3 arguments:
# * a starting directory
# * a (quoted from the shell) wildcard for -iname
# * a cutoff age in seconds

if ($#ARGV != 2) {
  die "Usage: $0 [ dir ] [ pattern ] [ age ]"
}

my ($start_dir, $pattern, $age) = @ARGV;

unless ($age =~ /^\d+$/ && $age > 0) {
  die "$0: age must be a positive integer"
}

my $now = time();
my $cutoff = $now - $age;

foreach my $file (glob "${start_dir}/${pattern}") {
  next unless -f $file;
  my $mtime = (stat($file))[9];
  if ($mtime < $cutoff) {
    print "${file};${mtime};" . ($now - $mtime) . "\n";
  }
}

相关内容