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

为何在FreeBSD 12中使用xargs -0参数时cat命令无法正常工作?

问题原因与解决方案

你遇到的问题核心是**xargs -0需要输入用空字符(\0)分隔的内容,但你的find和sort并没有输出这种格式**。

默认情况下,find会用换行符分隔文件名,sort也是基于换行符处理内容。当你把这些换行分隔的内容传给xargs -0时,它会把所有内容(包括换行符)当成一个完整的文件名,自然找不到对应的文件,所以才会出现No such file or directory的错误。

要解决这个问题,需要让整个管道链都使用空字符作为分隔符,具体步骤如下:

正确的命令序列

find "/tmp/database" -name "FOO 03-11*" -print0 | sort -z | xargs -0 cat

各部分的作用解释

  • find ... -print0:让find输出文件名时,用**空字符(\0)**代替换行符作为分隔符,这样即使文件名包含空格、换行等特殊字符,也能被正确识别。
  • sort -z:FreeBSD的sort支持-z选项,它会告诉sort读取输入时以空字符分隔条目,输出时同样用空字符分隔排序后的结果,保证整个管道的分隔符一致。
  • xargs -0:读取空字符分隔的输入,将每个文件名正确传递给cat,不会把文件名里的空格当成不同参数的分隔符。

这样修改后,cat就能正确接收每个带空格的文件名,依次输出它们的内容,完全符合你的预期。

内容的提问来源于stack exchange,提问作者M.E.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 18:17:37