shell - "查找"的更快替代品

1 linux shell find

我正在编写一个shell脚本,它应该输出目录中最旧的文件.此目录位于远程服务器上,并且(最坏情况下)其中包含1000到1500(临时)文件.我无法访问服务器,我对文件的存储方式没有影响.服务器通过稳定但不是非常快的线路连接.

我的脚本的结果传递给监控系统,如果目录中有太多(=未处理的)文件,则监控系统会向工作人员提出异议.

不幸的是,监视系统只允许在发生超时之前为我的脚本执行最长30秒的执行时间.

使用小目录进行测试时,这不是问题,这不是问题.通过远程安装目录(大约1000个文件)测试目标目录.

所以我正在寻找最快的方法来获取目录中的"最老/最新/最大/最小"文件(不是递归),而不使用'find'或排序'ls'的输出.

目前我在我的sh脚本中使用此语句:

old)
  # return oldest file (age in seconds)
  oldest=`find $2 -maxdepth 1 -type f | xargs ls -tr | head -1`
  timestamp=`stat -f %B $oldest`
  curdate=`date +%s`
  echo `expr $(($curdate-$timestamp))`
  ;;
Run Code Online (Sandbox Code Playgroud)

我试过这个:

gfind /livedrive/669/iwt.save  -type f -printf "%T@ %P\n" | sort -nr | tail -1 | cut -d' ' -f 2-
Run Code Online (Sandbox Code Playgroud)

这是使用谷歌可以找到的许多语句变体中的两个.

附加信息:我在安装了sh和bash的FreeBSD Box上写这个.我可以完全访问该框,并可以根据需要安装程序.供参考:gfind是从Linux中已知的GNU-"find"utuility,因为FreeBSD默认安装了另一个"find".

任何帮助表示赞赏

亲切的问候,dura-zell

Aif*_*Aif 5

对于最旧/最新的文件问题,您可以使用-tls选项,使用修改的时间对输出进行排序.

-t按修改的降序时间排序(最近修改的第一个).如果两个文件具有相同的修改时间戳,请按升序词典顺序对其名称进行排序.-r选项会反转这两个排序顺序.

对于大小问题,您可以使用-S按大小排序文件.

-S按字典顺序排序操作数之前按大小排序(最大文件优先).

请注意,对于这两种情况,-r都将颠倒输出的顺序.

-r反转排序顺序.

这些选项可以在FreeBSD和Linux上使用; 并且在ls的大多数实现中必须非常常见.

让我们知道它是否足够快.