Node.js使用tar压缩时如何排除父目录仅压缩指定文件夹
Node.js tar工具压缩文件夹时去除父目录层级的解决方法
你的问题出在tar.create的文件列表参数传了绝对路径——即使设置了cwd,绝对路径也会直接忽略这个工作目录配置,导致归档里带上完整的路径层级。
正确的处理方式:
- 保持
cwd设为archive文件夹所在的父目录(也就是你当前配置的/var/folders/fy/8xtt5hmn4_db7rc0b4rkvd2h0000gp/T) - 把第二个参数的绝对路径改成相对路径
['archive'],因为cwd已经切换到目标父目录,tar会直接从这个目录下读取archive文件夹进行压缩
另外注意:你设置了noDirRecurse: true,这个参数会让tar只压缩archive目录本身,不会递归压缩里面的子文件和子目录。如果需要把archive里的所有内容都打包,要去掉这个参数或者设为false。
调整后的代码如下:
tar.create( { cwd: '/var/folders/fy/8xtt5hmn4_db7rc0b4rkvd2h0000gp/T', // 如果需要递归压缩子内容,去掉下面这行或者设为false // noDirRecurse: true, file: '/var/folders/fy/8xtt5hmn4_db7rc0b4rkvd2h0000gp/T/archive.tgz' }, ['archive'] // 这里改成相对路径 ).then(_ => { functions.logger.log('tgz file created'); })
这样生成的归档文件里就只会有archive文件夹及其内容,不会带上前面的路径层级了。
内容的提问来源于stack exchange,提问作者JoergP
相关产品推荐
相关产品推荐

