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