Node.js tar模块创建压缩包时如何添加-C选项去除绝对路径?
Node.js tar模块实现类似tar -C的路径移除效果
要解决打包时保留完整路径的问题,你可以通过cwd参数实现和Linux中tar -C相同的效果,或者手动指定条目路径,以下是两种可行方案:
方案一:使用cwd参数(推荐,对应tar -C)
将cwd设置为目标文件夹test的父目录,然后仅传入test/作为打包路径,这样tar模块会以cwd为基准路径,打包时只会保留test及其内部内容,不会带上级路径:
tar.create({ gzip: true, file: 'test.tar.gz', cwd: '../result/1670341264809/' // 切换到test文件夹的父目录 }, ['test/']).then(_ => { // 打包完成后的操作 });
方案二:手动指定条目路径
如果不想切换工作目录,可以将打包条目从字符串改为对象,通过name指定在压缩包内的路径,path指向实际文件路径:
tar.create({ gzip: true, file: 'test.tar.gz' }, [{ name: 'test/', // 压缩包内显示的路径 path: '../result/1670341264809/test/' // 本地实际文件路径 }]).then(_ => { // 打包完成后的操作 });
原理说明
你原代码中直接传入完整相对路径时,tar模块会将整个路径作为压缩包内的文件路径。通过cwd切换工作目录,相当于告诉tar模块:"从这个目录开始打包",这样传入的test/就会被当作相对路径,最终压缩包内只会保留test文件夹及其内容。
内容的提问来源于stack exchange,提问作者mkHun
相关产品推荐
相关产品推荐

