Linux 获取访问日期/时间最少的目录的Shell命令

Linux 获取访问日期/时间最少的目录的Shell命令,linux,bash,shell,Linux,Bash,Shell,在find命令中是否有任何排序选项可用于获取访问日期/时间最少的目录 下面的linux命令显示访问和修改时间以及大小 stat-f 如果希望文件名不带前导路径,请将%p替换为%f一个简单的shell脚本也可以: unset -v oldest for i in "$dir"/*; do [ "$i" -ot "$oldest" -o "$oldest" = "" ] && oldest="$i" done 注意:要查找最早的目录,请使用上面的“$dir”/*/(谢谢

在find命令中是否有任何排序选项可用于获取访问日期/时间最少的目录

  • 下面的linux命令显示访问和修改时间以及大小

    stat-f


如果希望文件名不带前导路径,请将
%p
替换为
%f

一个简单的shell脚本也可以:

unset -v oldest
for i in "$dir"/*; do
    [ "$i" -ot "$oldest" -o "$oldest" = "" ] && oldest="$i"
done
注意:要查找最早的目录,请使用上面的
“$dir”/*/
(谢谢Cyrus)和下面的
-使用
查找
命令键入d

在bash中,如果需要递归解决方案,则可以使用
find
将其重写为一个while循环,并使用进程替换

unset -v oldest
while IFS= read -r i; do
    [ "$i" -ot "$oldest" -o "$oldest" = "" ] && oldest="$i"
done < <(find "$dir" -type f)
unset-v
而IFS=read-ri;做
[“$i”-ot“$oldest”-o“$oldest”=”]&&oldest=“$i”
完成<

这听起来更像是
ls的工作:

ls -ultd *|grep ^d

至少在我的系统(cygwin/bash)上使用
find
的问题是
find
访问目录,因此所有访问时间都会导致当前时间,这显然不符合您的目的。

感谢您的快速回复,你能建议一下如何将它与sort in find命令一起使用吗?我想加上
-type d
,因为他只是在寻找目录。这不起作用,至少对我来说,在cygwin/bash上是这样,因为所有目录都以当前时间作为访问时间(
find
本身访问目录)。@JeffY:我的回答是想用它来工作的。这样更安全(即,对于名称中有换行符的文件名)如果使用NUL分隔符(因此也需要
sort-z
)。请先反向排序以生成所需的输出,您只需将输出直接发送到
read
,这样就无需使用
尾部
。即
{read-r-d''time&&IFS=read-r-d''filename;}<我建议在查找访问日期/时间最少的目录的第一个版本中,将
“$I”-ot“$oldest”
替换为
”$I”-ot“$oldest”
,并将
“$dir”/*/
替换为
”$dir”/*/
。我喜欢它。谢谢你的指针。我会更新答案。等等——为什么
“$oldest”-ot“$I”
?我们正在测试
是否为“$i”-是否为“$oldest”“<代码> >我们只想更新<代码>最旧的<代码> >如果<代码> i>代码>是旧的吗?我理解这个问题,以便搜索最新的目录。目标是AtMe,不是Mtime,对吗?除此之外,我还将考虑NUL划定“代码< >查找< /代码>的输出。MMMM……我没有考虑我们是否在< C之间讨论差异”。ode>atime
mtime
-这将产生影响,需要调整
find
测试。好的观点。OP需要澄清。虽然这可能是一个很好的问题答案,但请尝试提供一些背景信息。这个命令做什么?他确实要求“访问时间”,而不是modtime,因此
%A
而不是那里的
%T
。但这遇到了我的回答中指出的问题--
find
本身将所有访问时间设置为当前时间(对于dirs)还有,使用换行分隔符是一个糟糕的选择,因为在文件名中允许使用换行符。上面没有文件名解析。如果你在文件名中真的有换行符,那么你的伤害就更大了。在我以前的雇主那里发生了一个更有趣的数据丢失事件因为编写shell脚本的人假设目录中的所有文件都将匹配
[a-z0-f]{24}
。当缓冲区溢出时,我们将随机垃圾转储到文件名中,其中碰巧包含一个环绕星号的空格,随后出现了fun。我指的是“fun”“意外删除用于支持客户计费的多TB记录"。如果您假设某件事永远不会发生,那么您编写的代码无法处理它的发生……当然,在这里给出的示例中没有解析,但是解析必须在输出以编程方式可用之前发生,因此没有显示该步骤的事实是一个没有区别的区别。如果您想在没有在这个过程中改变访问时间,你可能会运气不好(除非你的文件系统支持只读快照,可以为这些元数据进行挖掘,如AFS、ZFS和btrfs)。mtime更容易。如果你在那里描述你的代码,这将是一个更好的答案!
find -type d -printf '%T+ %p\n' | sort
ls -ultd *|grep ^d
find -type d -printf '%T+ %p\n' | sort