在 find 命令中查找不支持 printf 的 AIX 系统上的前 N ​​个最旧文件

Posted

技术标签:

【中文标题】在 find 命令中查找不支持 printf 的 AIX 系统上的前 N ​​个最旧文件【英文标题】:Find top N oldest files on AIX system not supporting printf in find command 【发布时间】: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 调用。祝你好运。 【参考方案1】:

在网上搜索后,我主要根据此处提供的答案提出了以下一行解决方案:https://superuser.com/a/294164 和 https://***.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

【讨论】:

以上是关于在 find 命令中查找不支持 printf 的 AIX 系统上的前 N ​​个最旧文件的主要内容,如果未能解决你的问题,请参考以下文章

find命令详解

linux_find文件查找命令

查找命令find

find命令

文件查找命令——find

Linux学习命令汇总八——文件查找命令find选项及使用技巧