繁体   English   中英

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

[英]Check last modified date is within n seconds

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

这是一个转折点,它也必须是单线的(它具有Marathon运行状况检查功能,我不能依靠在那里的脚本文件系统)。

这是我到目前为止的内容:

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。 打击壳。

假设find了GNU(假设问题中使用了其他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的文件的正确行为。表达式。

此代码有效。

if [ `expr $(date +%s) - $(stat -c %Y $(ls -t | head -n 1))` -gt 100 ];then echo 1;else echo 0;fi

它是如何工作的?

ls -t-根据时间列出文件。

head -n 1-给出第一个最新文件。

date +%s给出从纪元起经过的时间。

stat -c%Y-给出自时期以来的修改时间

expr-从修改的文件日期中减去当前日期。

编辑-1

根据查尔斯的建议

echo $(( $(date +%s) - $(printf '%s\\0' * | xargs -0 stat -c '%Y' | sort -g | tail -n 1) > 100 ))

这是更优雅的方式。

我认为我不明白您的要求,但您可以尝试以下

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

如果您正在寻找其他东西,请再提供一些提示。 这里的$PREV多少? 你跟100的内部比较这if但哪里PREV价值从何而来?

在回答我自己的问题时,我想到了:

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

我需要的修改是使用命令替换:$(xargs)获得先前的管道输出。

但是我比bigbounty的解决方案更喜欢我的解决方案。 标记为已解决。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM