Vil*_*lle 6 command-line find timestamps files
如何-atime以毫秒、秒或分钟为单位进行设置?默认为天:
-atime n
上次访问文件 n*24 小时前。当 find 计算出该文件在多少 24 小时前被上次访问时,任何小数部分都将被忽略,因此要匹配 -atime +1,文件必须至少在两天前被访问过。
我想每小时运行一次 cron 作业,以检查特定目录中的文件是否在该时间范围内被访问过。以小数形式输入时间似乎不起作用,即
find . -atime 0.042 -print
Run Code Online (Sandbox Code Playgroud)
但也许还有更好的解决方案——也许是另一个命令?或者这可能无法完成..为了查找在最后x分钟内修改的文件-mmin,允许以分钟为单位设置时间。也许没有这样的访问时间选项意味着信息的存储方式不同?
我正在使用 Ubuntu 16.04。
请注意,当您这样做时-mtime <timespec>,会<timespec>检查文件在find开始时的年龄。
除非您在非常小的目录树中运行它,否则find将需要几毫秒(如果不是几秒钟或几小时)来爬行目录树并对lstat()每个文件执行一次。因此,小于一秒的精度不一定有多大意义。
另请注意,并非所有文件系统都支持亚秒级粒度的时间戳。
话虽如此,有几个选择。
使用find许多 BSD 和来自 的一个schily-tools,您可以执行以下操作:
find . -atime -1s
Run Code Online (Sandbox Code Playgroud)
查找上次访问时间少于一秒的文件(与find启动时间相比)。
与zsh:
ls -ld -- **/*(Dms-1)
Run Code Online (Sandbox Code Playgroud)
对于亚秒级粒度,使用 GNU 工具,您可以使用一个参考文件,其时间设置为touch:
touch -ad '0.5 seconds ago' ../reference
find . -anewer ../reference
Run Code Online (Sandbox Code Playgroud)
或者使用最新版本的perl:
perl -MTime::HiRes=lstat,clock_gettime -MFile::Find -le '
$start = clock_gettime(CLOCK_REALTIME) - 0.5;
find(
sub {
my @s = lstat $_;
print $File::Find::name if @s and $s[8] > $start
}, ".")'
Run Code Online (Sandbox Code Playgroud)