【发布时间】:2009-07-30 14:40:48
【问题描述】:
我想查看某些文件是否在最后三分钟内发生更改,以确定cp 是否成功,以及是否应该exit 或继续执行脚本。我该怎么做?
谢谢
【问题讨论】:
我想查看某些文件是否在最后三分钟内发生更改,以确定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
【讨论】:
stat -c %Y 的支持范围有多广?在 OS X 上,我会使用 stat -f %m,但在某些 Linux 风格上,stat -f 会显示文件系统信息。大多数系统都支持date -r "$file" +%s,但尴尬的是在 OS X 上不起作用……有趣的东西 :)
这个 if 语句的语法取决于你的特定 shell,但 date 命令不。我使用 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 告诉 date 输出一个 UNIX 时间(重要的是它是以秒为单位的整数)。您还可以使用 stat 获取此信息 - 命令 stat -c %Y <file> 是等效的。确保使用%Y 而不是%y,以便获得以秒为单位的可用时间。
【讨论】:
stat命令会给你最后修改时间
stat -c %y <filename>
【讨论】:
Find 可以输出最近 3 分钟内修改过的文件名。
find file1 -maxdepth 0 -mmin -3
【讨论】:
if [ -n "$(find etc...)" ]; then...
文件时间戳更改并不真正意味着您已成功复制。
如果您损坏文件或文件系统空间不足,
您可能仍会看到时间戳更改(需要确认)。
我没有得到您要求的确切背景。
如果您触发 cp,它会完成并返回——在它工作时不会返回。
那么,返回(带有成功退出代码)不是成功的良好指标吗?
如何以及为什么要在 cp 操作中部分退出?
或者,是循环文件列表的批处理cp 脚本...
一些详细说明会有所帮助。
【讨论】: