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

Node.js使用spawnSync调用tar生成空归档文件问题求助

Node.js中spawnSync调用tar生成空归档文件的问题

我在某目录下有一批文本文件(称为索引文件),每个文件内包含以换行符分隔的文件列表。在Node.js脚本中,我遍历这些索引文件,使用spawnSync调用tar命令,通过-T参数传入索引文件,预期tar会将索引文件中列出的所有文件归档。但实际生成的却是完全空的归档文件,且无任何输出。

脚本相关代码

console.log("Processing index files");
process.chdir(sourcePath);
for(const key in indexFiles) {
    let index = indexFiles[key];
    console.log("Processing: "+index);
    let commandLine = "tar acf "+outputPath+'/'+key+".tar.bz2 -T "+index;
    console.log(process.cwd());
    console.log(commandLine);
    let tar = spawnSync("tar", ["acf", outputPath+"/"+key+".tar.bz2", "-T", index], {cwd:sourcePath, stdio:"inherit"});
}

其中sourcePath是索引文件中列出的文件所在位置,我将其设为CWD,与命令行执行tar的方式一致。

日志输出

Processing index files
/media/chmo/NewLinux/scan/2022-03-22/temp
Processing: /media/chmo/NewLinux/wrangled/d01d36c8-698a-4791-9075-73fa4c0af881_0.txt
/media/chmo/NewLinux/scan/2022-03-22/temp
tar acf /media/chmo/NewLinux/wrangled/0.tar.bz2 -T /media/chmo/NewLinux/wrangled/d01d36c8-698a-4791-9075-73fa4c0af881_0.txt

手动切换到日志显示的CWD并执行对应命令完全正常,但Node.js中执行却生成空归档文件,请问问题出在哪里?


问题原因

问题出在spawnSync传递的tar参数格式上。在shell中执行tar acf ...时,shell会自动将不带短横线的组合短选项解析为-a -c -f,但直接通过spawnSync传递"acf"作为参数时,tar会把它当作要归档的文件名而非选项。此时tar会尝试归档acf这个不存在的文件,加上后续参数被错误解析,最终生成空归档。

解决方法

修改spawnSync的参数列表,给tar选项加上短横线-,有两种写法:

写法1:使用组合选项加短横线

let tar = spawnSync("tar", ["-acf", outputPath+"/"+key+".tar.bz2", "-T", index], {cwd:sourcePath, stdio:"inherit"});

写法2:拆分单个选项加短横线

let tar = spawnSync("tar", ["-a", "-c", "-f", outputPath+"/"+key+".tar.bz2", "-T", index], {cwd:sourcePath, stdio:"inherit"});

两种写法都能让tar正确识别选项,读取索引文件中的列表完成归档,和手动执行命令的效果一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 15:48:03