我想查找某些文件是否在最近三分钟内更改,以确定cp是否成功,以及是否应该exit或继续脚本。我怎么能这样做?

由于

有帮助吗?

解决方案

您可以使用stat获取文件的上次修改时间,使用date获取当前日期。自纪元<!>以来,您可以使用两者的格式字符串在<!>“秒内获取它们:

current=`date +%s`
last_modified=`stat -c "%Y" $file`

然后,把它放在一个条件下很容易。例如:

if [ $(($current-$last_modified)) -gt 180 ]; then 
     echo "old"; 
else 
     echo "new"; 
fi

其他提示

此if语句的语法取决于您的特定shell,但日期命令不会。我用bash;必要时修改。

if [ $(( $(date +%s) - $(date +%s -r <file>) )) -le 180 ]; then
    # was modified in last three minutes
else
    # was not modified in last three minutes
fi

+%s告诉日期输出UNIX时间(重要的是它是一个以秒为单位的整数)。您还可以使用stat来获取此信息 - 命令stat -c %Y <file>是等效的。确保使用%Y%y,以便在几秒钟内获得可用时间。

stat命令将为您提供上次修改时间

stat -c %y <filename>

如果文件名在最近3分钟内被修改,则可以输出文件名。

find file1 -maxdepth 0 -mmin -3

文件时间戳更改并不意味着您已成功复制。
如果你崩溃了文件或文件系统空间不足,
您可能仍会看到时间戳更改(需要确认)。

我没有得到您要求的确切背景。
如果您触发cp,它将完成并返回 - 在它工作时不会返回 那么,回报(成功退出代码)不是成功的良好指标吗?

如何以及为何部分退出<=>操作?
或者,是一个循环遍历文件列表的批处理<=>脚本...
一些阐述会有所帮助。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top