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

为什么find | xargs | ls命令无法列出find找到的子目录文件

问题根因

  • ls 本身不读取管道传入的标准输入内容,你通过管道传递的所有文件路径会被直接忽略,默认仅输出当前工作目录的文件列表,这是命令无法返回子目录文件的核心原因。
  • cat 支持读取标准输入内容,所以结构相同的cat命令可以正常打印所有匹配文件的内容,两者的差异来自命令本身的设计逻辑,和管道、xargs组件无关。
  • 你当前写的xargs没有指定要执行的命令,仅会将输入的所有文件路径拼接成一行输出,没有起到传递参数给ls的作用。

可用的正确写法

写法1:find+xargs(适配包含特殊字符的文件名)

find . -type f -print0 | xargs -0 ls -lt

说明:-print0和-0配对使用,即使文件名包含空格、换行、特殊符号也不会出现解析错误,xargs会将所有找到的文件路径作为参数传递给ls -lt,实现全目录文件按修改时间倒序排列。

写法2:find自带exec参数(无需额外调用xargs)

find . -type f -exec ls -lt {} +

说明:{}会被匹配到的文件路径替换,结尾的+表示一次性将所有匹配结果传递给ls,执行效率和xargs一致,写法更简洁。

写法3:zsh环境下的极简写法

ls -lt **/*(.)

说明:**/*递归匹配所有子目录内容,后缀(.)限定仅匹配普通文件,不需要调用find即可实现需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 01:45:01