xargs 不是自动转发参数的黑盒,它默认按空格/换行切分输入,遇含空格、换行、单引号的文件名会出错;必须配对使用 find -print0 和 xargs -0 才安全。
直接说结论:xargs 不是“自动转发参数”的黑盒,它默认按空格/换行切分输入,遇到含空格、换行、单引号的文件名就会崩——必须手动配对 -print0 和 -0 才算真正安全。
find | xargs rm 会误删或失败常见现象:find /tmp -name "*.log" | xargs rm 看似能删日志,但一旦遇到 my file.log 这种带空格的文件名,xargs 就把它拆成 my 和 file.log 两个参数,结果 rm my 报错,“删掉不存在的文件”,还可能误删当前目录下叫 my 的其他东西。
根本原因:POSIX 路径允许任意字符(除 / 和