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

如何将Bash中find命令的输出传递给cat命令以读取文件内容?

解决find输出传给cat读取文件内容的问题

哈哈,这个坑我刚接触Linux的时候也踩过!咱们先搞清楚为啥原来的命令不行:

当你执行find -size 8c | cat时,find确实输出了./test.txt,但此时cat是从标准输入(也就是管道传过来的内容)读取数据,它会直接把收到的字符串打印出来,根本不会把这个字符串当成文件名去打开读取内容。cat <(find -size 8c)其实也是同理——<()会把find的输出包装成一个临时文件,cat读这个临时文件的内容就是那行文件名,自然还是输出文件名啦。

要让cat读取找到的文件内容,关键是要让cat把find输出的结果当成文件名参数,而不是输入文本。这里给你几种靠谱的方法:

  • 用xargs传递参数:

    find -size 8c | xargs cat
    

    xargs的作用就是把管道过来的内容作为参数传给后面的cat,这样cat就会去打开这些文件读取内容了。如果你的文件名可能包含空格、特殊字符,建议用更安全的版本:

    find -size 8c -print0 | xargs -0 cat
    

    -print0让find用空字符分隔文件名,-0让xargs识别这种分隔方式,避免特殊字符导致的错误。

  • 用find自带的-exec选项:
    这是最稳妥的方式之一,直接让find对找到的文件执行cat命令:

    find -size 8c -exec cat {} \;
    

    这里{}代表找到的每个文件名,\;是命令结束标记。如果想一次性把所有文件名传给cat(效率更高),可以把\;换成+:

    find -size 8c -exec cat {} +
    
  • (不太推荐)用命令替换:
    bash里也可以用$(...)把find的输出作为参数传给cat:

    cat $(find -size 8c)
    

    但这种方式在文件名包含空格、换行符或者特殊字符时很容易出错,所以优先考虑前两种方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:14:35