【问题标题】:Find top N oldest files on AIX system not supporting printf in find command在 find 命令中查找不支持 printf 的 AIX 系统上的前 N ​​个最旧文件
【发布时间】:2021-03-24 11:56:57
【问题描述】:

我正在尝试找到一种类似于下面使用的解决方案,以在我的 AIX 系统上从给定目录开始查找前 N 个最旧的文件(修改时间),并挖掘它下的所有子目录。不幸的是,AIX(我的版本是 7.1)find 命令不支持 printf。是否有其他方法可以在 AIX 上完成相同的任务?

$ find /home/sk/ostechnix/ -type f -printf '%T+ %p\n' | sort | head -n 5

来源:https://ostechnix.com/find-oldest-file-directory-tree-linux/

find 命令的 AIX 手册: https://www.ibm.com/support/knowledgecenter/ssw_aix_71/f_commands/find.html

【问题讨论】:

  • this thread 有什么帮助吗?
  • AIX,*nix (-; 的祸根。它是否支持stat 实用程序并且该实用程序是否包含printf 选项?那么您可以find /path -print | xargs stat printf"%...." | sort ... 否则,您可以使用@ 987654328@ 选项并解析/重新格式化该数据(可能在单独的脚本中),您也可以使用 xargs 调用。祝你好运。

标签: find printf aix


【解决方案1】:

在网上搜索后,我主要根据此处提供的答案提出了以下一行解决方案:https://superuser.com/a/294164https://stackoverflow.com/a/23478116

以下解决方案首先使用 find 命令查找文件(从当前目录开始),然后将输出通过管道传送到 perl 命令进行排序,然后将生成的文件列表传送到另一个 perl 命令以获取每个文件的时间戳所需格式的文件。结果将显示前 5 个最旧的文件。

我不是 perl 专家,但我猜下面可以进一步简化。如果是这种情况,请告诉我。到目前为止,以下解决方案似乎运行良好。它在我的 AIX 系统上运行良好。

find . -type f -print  2>/dev/null |
perl -l -ne '
$_{$_} = -M;  
END {
    $,="\n";
    @sorted = sort {$_{$b} <=> $_{$a}} keys %_;  
    print @sorted[0..5];
}'  | xargs -I {} perl -MPOSIX   -e 'print "\n $ARGV[0] -------> $1 " . strftime("%A %Y-%m-%d  %H:%M:%S", localtime((stat "$ARGV[0]")[9]))  '  {}

这给出如下输出:

./file1.txt ---> Sunday 2018-03-04 15:20:32
./sample/file2.sh ---> Sunday 2019-01-27 08:30:45
./test/file3.txt ---> Tuesday 2019-05-21 18:45:32
./sample/temp/file4.sh ---> Friday 2019-12-27 12:30:45
./file5.txt ---> Tuesday 2020-06-13 15:20:32

【讨论】:

    猜你喜欢
    • 2021-01-10
    • 2014-03-07
    • 2014-06-02
    • 2013-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-22
    相关资源
    最近更新 更多