You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

find命令结果中重复显示同一文件的原因及解决方法

问题

执行命令 find . -atime -1 -exec ls -lt {} \; 后,结果中出现同一文件同时以hello.txt和./hello.txt形式重复显示的情况,请问该现象产生的原因是什么?如何避免?

原因

这种重复是find的遍历逻辑和-exec的执行方式共同导致的:

  • find .会遍历当前目录下的所有条目,包括当前目录本身(.)和目录下的文件(比如./hello.txt);
  • 当当前目录满足-atime -1的匹配条件时,find会执行ls -lt .,这条命令会列出当前目录下的所有文件,其中就包含hello.txt;
  • 随后find遍历到./hello.txt时,又会单独执行ls -lt ./hello.txt,再次输出该文件的信息,最终导致同一文件被重复显示。
解决方法

有几种简洁的方式可以避免这种重复:

  • 仅查找普通文件,排除目录:在find命令中添加-type f参数,让find只匹配普通文件,不会将当前目录(目录类型)纳入匹配范围。修改后的命令为:
    find . -type f -atime -1 -exec ls -lt {} \;
    
  • 改用xargs批量处理:用-print0和xargs -0组合批量传递匹配的文件路径,避免多次调用ls,同时可搭配-type f排除目录:
    find . -type f -atime -1 -print0 | xargs -0 ls -lt
    
  • 直接用find格式化输出:无需调用ls,利用find的-printf参数自定义输出格式,既能避免重复,也能减少进程创建开销。示例命令(模拟ls -lt的输出格式):
    find . -type f -atime -1 -printf "%M %u %g %s %Tb %Td %Tk:%TM %p\n"
    

内容的提问来源于stack exchange,提问作者Shepard Merose

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 06:47:20