Linux bash 脚本获取文件夹中最旧文件+如果文件夹为空则返回值

Linux bash 脚本获取文件夹中最旧文件+如果文件夹为空则返回值

我正在使用 SUSE Linux Enterprise Server 11 (x86_64),
我需要找到文件夹中最旧的文件并以 unixtime 格式打印出来。我确实用这个一行代码完成了这项工作:
find $1 -maxdepth 1 -type f | xargs -i stat -c "%Y" '{}' | sort | head -n 1
($1 代表 Zabbix)

但是当文件夹变空时,值似乎也为空,而我的监控软件 Zabbix 无法处理空值,所以我需要它,例如,如果文件夹为空,则打印出数字 0。

好的,接下来我编写了这个漂亮的脚本,但正如你们所见,它很糟糕。所以有人能帮我吗?
仅供参考。我两天前开始摆弄 Linux,所以请耐心等待 :P

#!/bin/bash    
export fileage
fileage=$(find -maxdepth 1 -type f | xargs -i stat -c "%Y" '{}' | sort | head -n 1)
if [ $? -eq 0 ]
then
   echo "0"  
else
   echo "fileage"
fi

答案1

寻找可以打印文件/目录可以拥有的 3 个时间戳中的任何一个。你只需要使用-printf使用适当的格式序列:%C@或者%A@或者%T @(详情见男人找到)。

对于空目录,检查$?为 0 可能会产生误导,因为 0 返回代码表示“没有发生任何不好的事情”,而空目录不算“有不好的事情”,这只是一种特殊但正常的情况。但您可以存储 find 的输出(以及管道中的以下命令)并检查它是否为空。

喜欢

fileage=$(find $1 -maxdepth 1 -type f -printf "%T@\n" | sort | head -n 1)
if [ -z "fileage" ]; then
  echo 0
else
  echo $fileage
fi

或者,如果你想简短一点:

fileage=$(find $1 -maxdepth 1 -type f -printf "%T@\n" | sort | head -n 1)
echo ${fileage:=0}

尽管如此,如果你真的想看到“最旧的文件”,一定要小心,因为这意味着要读取创建时间该文件没有被存储。你可以用所有三个时间戳中最新的一个来表示最旧的文件。

相关内容