首页 / LINUX / Linux文件创建时间戳竞争条件
Linux文件创建时间戳竞争条件
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Linux文件创建时间戳竞争条件,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1815字,纯文字阅读大概需要3分钟。
内容图文
我正在尝试做我认为在Linux下简单的事情.我有一个运行各种测试程序的bash脚本,我想确定当前目录中的哪些文件是由测试程序创建的.所以我做的是这样的:
touch timestamp-file run the test find -newer timestamp-file -type f > list-of-files rm -f timestamp-file
原来查找-newer的粒度很差,因此通常会发生的情况是测试程序生成的某些文件显示为OLDER而不是时间戳文件.那么我试过这个:
ls -tr1 | sed '1,/timestamp-file/d'
生成相同的列表.这通常有效,但并非总是如此.我仍然最终会遇到这样的情况:测试生成的文件显示为比timestamp文件旧.
谢谢!
附:我可以通过获取目录的两个快照来实现另一种方式,一个在测试程序运行之前,一个之后,然后比较它们.第二个列表中不在第一个文件中的任何文件必须由测试程序创建(我不关心后台作业或写入目录的其他用户).但是这个方法不是我想要的,因为如果在运行测试之前没有删除输出文件(它们应该是,但在某些情况下它们可能不是),这个方法会说它不是由测试程序,因为它是在测试程序运行之前的dir中.
解决方法:
在运行之前获取所有文件的文件名,但包括它们的时间戳:
find -printf '%p %T@\n' | sort > file1
如果您还没有找到该选项,您也可以使用该工作的统计信息:
find -print0 | xargs -0 stat -c "%n %Y" | sort > file1
并运行到file2之后.然后用
comm -1 -3 file1 file2
它会显示file2独有的行,如果我没有弄错的话,它必须是新文件.如果它们之前存在,它们的修改时间将会发生变化,这将由%T @ thingy处理(打印出自1970年以来的秒数):
[js@HOST2 cpp]$find -printf '%p %T@\n' | sort > file1 [js@HOST2 cpp]$echo foo>bar [js@HOST2 cpp]$echo foo>baz [js@HOST2 cpp]$find -printf '%p %T@\n' | sort > file2 [js@HOST2 cpp]$comm -1 -3 file1 file2 . 1230947309.0000000000 ./bar 1230947308.0000000000 ./baz 1230947309.0000000000 ./file2 1230947315.0000000000 [js@HOST2 cpp]$find -printf '%p %T@\n' | sort > file1 [js@HOST2 cpp]$echo lol>bar [js@HOST2 cpp]$find -printf '%p %T@\n' | sort > file2 [js@HOST2 cpp]$comm -1 -3 file1 file2 ./bar 1230947359.0000000000 ./file2 1230947362.0000000000 [js@HOST2 cpp]$`
内容总结
以上是互联网集市为您收集整理的Linux文件创建时间戳竞争条件全部内容,希望文章能够帮你解决Linux文件创建时间戳竞争条件所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。