查找早于15秒但早于2秒的文件


17

我想查找早于15秒但早于2秒的文件。这是我当前正在使用的脚本,该脚本可捕获15秒以上的文件:

find /my/directory -name '*.jpg' -not -newermt '-15 seconds'

任何帮助是极大的赞赏


2
您使用什么操作系统?find实现方式有所不同。
terdon

2秒钟前修改的文件是否应该匹配?15秒钟前修改完一个文件怎么办?
Mikel

脚本开始或结束时是否超过2秒?
斯特凡Chazelas

@Mikel,这可能无关紧要,因为如今的时钟具有纳秒级的分辨率。
斯特凡Chazelas

1
好的...因为没有人问... @ Yllier123为什么您需要查找在2 <x <15秒之间创建的文件?我只是好奇。
C Bauer 2015年

Answers:


17

您可以通过链接多个谓词来组合它们。

没有-oldermt,但是您可以将其写为-not -newermt

你要:

  • -newermt '-15 seconds' 表示文件的时间不到15秒,并且
  • -not -newermt '-2 seconds' 表示文件已超过2秒

尝试:

find /my/directory -newermt '-15 seconds' -not -newermt '-2 seconds'

或者,要符合POSIX:

find /my/directory -newermt '-15 seconds' \! -newermt '-2 seconds'

同样,正如您(和其他读者)都知道的那样,“较新”的意思是比最近才修改,而不是比最近才修改。


3
真好 请注意,-not -newermt '-2 seconds'这也将匹配2秒钟前的文件。也-not -newermt '3 seconds'用于排除那些。
terdon

1
是的,边缘情况总是很有趣。我实际上不确定用于这些比较的分辨率。我的假设是,〜2.000000001秒前修改的所有内容都是匹配的,但这还取决于您的文件系统和操作系统。
Mikel

好点,我不知道分辨率是多少。我刚刚测试touch -d "2 seconds ago" file; find . -newermt '-15 seconds' -not -newermt '-2 seconds'并得到了file
terdon

@terdon好,这取决于时间戳记是否具有比一秒更精确的分辨率;将取决于系统,文件系统,并且如果同一文件系统上的文件被多个不同的计算机使用,甚至可能会有所不同。
Blacklight Shining

“较新”的意思是“比最近”。“ m”表示“已修改”。
OrangeDog

4

您没有提及您的操作系统...。

这与FreeBSD或的现代find实施效果很好sfind

find /my/directory -name '*.jpg' -mtime -15s -mtime +2s

Sfind是Schily工具的一部分:http : //sourceforge.net/projects/schilytools/files/

警告:我刚刚在中发现了一个问题sfind。如果-mtime参数小于60s,则它将无法正常工作,因为当前将文件时间与最初为的年切换计算的时间戳60秒进行比较-ls

顺便说一句:-not不属于find,它是不可移植的GNUism。


1
bash标签……所以环境可能是Cygwin,Debian GNU / Hurd,bash在FreeBSD或Solaris上运行,…;-)
phk 2015年

对于GNU find来说,小数似乎很疯狂,但可以用作解决方法。
Arthur2e5

POSIX find 确实具有!for -not as! expression。因此,没什么大不了的。

@phk这就是为什么我提到与增强的标准一起使用的方法的原因primaryfind以通知人们不需要总是添加新的东西primaries就能增强功能。顺便说一句:libfind已在中发布了一个修订schily tools
2015年

@BinaryZebra的问题是gfind根本没有添加-not别名。从来不需要它,它的存在可以看作是供应商锁定策略。
2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.