gpt4 book ai didi

linux - 检查最后修改日期在 n 秒内

转载 作者:太空宇宙 更新时间:2023-11-04 10:21:09 25 4
gpt4 key购买 nike

我需要检查目录中所有文件的最后修改日期,以查看最新文件是否在某个任意时间段内被修改过。例如。 200 秒。

这是一个转折点,它也必须是单行的(它是马拉松健康检查,我不能依赖脚本文件的文件系统)。

这是我目前所拥有的:

ls -v | tail -n 1 | expr $(date +%s) - $(xargs date +%s -r) | if [ $PREV -gt 100 ]; then echo 1; else echo 0; fi

ls -v 以“自然顺序”(文件名单调递增)对目录内容进行排序,因此最新的文件总是最后一个。tail -n 1 获取最后一个值。

然后 expr $(date +%s) - $(xargs date +%s -r) 从现在减去文件的最后修改日期作为 unix 时间戳。

接下来,我想将结果传递给 if 语句,并根据与常量的比较返回 0 或 1。但我不知道如何将管道输出放入 if 语句中。

注意:我知道我可以在前面的管道中进行 if 检查来包装减法,但我认为单行代码已经足够困惑了。

感谢任何帮助。主机操作系统是 Linux。 Bash 外壳。

最佳答案

假设 GNU find(一个公平的假设,考虑到问题中使用的其他 GNU 工具):

if [[ $(find . -maxdepth 1 -type f -newermt '-200 seconds' -print -quit) ]]; then
echo "The newest file is less than 200 seconds old"
else
echo "The newest file is more than 200 seconds old"
fi

在带有 BSD 工具的系统(例如 MacOS)上,这可能是:

if [[ $(find . -maxdepth 1 -type f -mtime -200s -print -quit) ]]; then
echo "The newest file is less than 200 seconds old"
else
echo "The newest file is more than 200 seconds old"
fi

以上任何一个(适用于当前平台)都会让 find 扫描目录,直到找到一个不到 200 秒的文件;并将在该点停止并打印该文件的名称。与使用 ls 对整个列表进行排序(或在找到一个文件后继续扫描更多文件)相比,这使得大型目录的搜索效率要高得多。

另请注意 [[ ]] 的使用,它会抑制字符串拆分 - 使用 [ ],在 $( ) 周围加引号将需要确保文件名中包含空格的文件或名称可以扩展为 glob 表达式的文件的正确行为。

关于linux - 检查最后修改日期在 n 秒内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43841165/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com