2009-07-30 123 views

回答

16

您可以使用stat获取文件的最后修改时间,使用date获取当前日期。您可以使用格式字符串两个,让他们在“自纪元秒”:

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

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

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

对于Solaris上的用户,请注意日期+%s不起作用 – Karl 2011-06-07 13:54:45

+0

'stat -c%Y`受到多大程度的支持?在OS X上,我会使用`stat -f%m`,但在某些Linux版本中`stat -f`显示文件系统信息。大多数系统都支持'date -r'$ file“+%s`,但是在OS X上不起作用会很尴尬...... :) :) – Haravikk 2013-07-26 09:51:36

3

stat命令会给你的最后修改时间

stat -c %y <filename> 
4

这样做的语法if语句取决于特定的壳,但日期的命令没有。我用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,以便在几秒钟内获得可用时间。

0

文件时间戳更改并不真正意味着您已成功复制。
如果您登陆破坏文件或文件系统空间不足,您可能仍会看到时间戳更改(需要确认)。

我没有得到您的要求的确切上下文。
如果您触发cp,它会完成并返回 - 在工作时不返回。
那么,是不是返回(成功退出代码)成功的一个很好的指标?

如何以及为什么要在cp操作中部分退出?
或者,是一个批处理cp脚本循环的文件列表...
一些阐述会有所帮助。

2

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

find file1 -maxdepth 0 -mmin -3