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

如何解决从files.txt读取含空格文件名时du -hc统计异常问题

解决带空格文件名的du统计问题

这个问题我之前也踩过坑!带空格的文件名在Shell里很容易被当成多个参数拆分,尤其是用命令替换直接读取文件的时候,确实头疼。给你几个靠谱的解决办法:

方法1:用xargs按换行分隔处理

如果你的files.txt里是每行一个文件名,直接让xargs以换行符作为分隔符,而不是默认的空格:

xargs -d '\n' du -hc < files.txt

-d '\n'参数告诉xargs把每一行当作一个完整的文件路径,不管里面有多少空格、制表符,都不会被拆分。

方法2:用while循环逐行读取(最灵活)

这种方式能完美处理各种特殊文件名,包括空格、特殊字符,甚至开头/结尾带空格的文件:

while IFS= read -r file; do
    du -h "$file"
done < files.txt | du -hc -
  • IFS=:防止读取时自动忽略文件名开头或结尾的空格
  • -r:禁止转义文件名里的反斜杠,保证特殊字符被正确识别
  • 最后通过管道把每个文件的du结果传给du -hc -,-表示从标准输入读取内容,最终输出总大小

方法3:用null分隔符处理极端情况(含换行符的文件名)

如果你的文件名里甚至可能包含换行符(虽然很少见,但Unix允许),可以用null字符作为分隔符,这是最安全的方式:

cat files.txt | tr '\n' '\0' | xargs -0 du -hc
  • tr '\n' '\0'把文件里的换行符替换成null字符
  • xargs -0以null作为参数分隔符,彻底避免任何拆分错误

额外建议:从源头避免问题

如果你的files.txt是通过find这类命令生成的,直接在生成时用-print0选项输出null分隔的路径:

find /path/to/dir -type f -print0 > files.txt

之后读取时直接用xargs -0 du -hc < files.txt,从根源上解决分隔符问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:54:11