为何在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.
相关产品推荐
相关产品推荐

