在 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 个最旧文件的主要内容,如果未能解决你的问题,请参考以下文章