如何将tar文件解压到文件夹并将文件夹压缩为tar文件?
背景
我的tar压缩包中包含一份发布文件。为了方便用户使用,我希望最终的发布版本能添加一些额外文件,并调整文件结构。
这意味着我需要完成三件事:
- 将tar压缩包的内容解压到一个文件夹中
- 向该文件夹添加额外文件并调整部分文件位置
- 将所有内容重新压缩,完成操作
遇到的问题
我清楚如何使用File等工具完成第二步,但尝试了多种方法执行第一步和第三步均失败:
- 曾尝试使用
:zip,但返回编码错误,推测是因为文件是tar而非zip格式 - 了解
File.open("path", :read, :compressed)的用法,但我不想读取内容,而是要将其解压到新文件夹中 - 查看过
Unzip工具,但不符合我的需求
我的疑问
如何将tar文件解压到文件夹中,并将文件夹压缩为tar文件?
解决方案
在Ruby中可以使用minitar库来处理tar文件的解压与压缩,以下是具体实现:
1. 安装依赖
首先安装minitar gem:
gem install minitar
2. 解压tar文件到文件夹
解压普通tar文件
require 'minitar' require 'fileutils' # 指定目标文件夹路径 target_dir = './extracted_files' # 创建目标文件夹(不存在则创建) FileUtils.mkdir_p(target_dir) # 解压tar文件到目标文件夹 Minitar.unpack('your_source.tar', target_dir)
解压tar.gz(压缩版tar)文件
如果你的tar文件是gzip压缩的(后缀为.tar.gz),需要结合Zlib处理:
require 'minitar' require 'zlib' require 'fileutils' target_dir = './extracted_files' FileUtils.mkdir_p(target_dir) Zlib::GzipReader.open('your_source.tar.gz') do |gz_stream| Minitar.unpack(gz_stream, target_dir) end
3. 压缩文件夹为tar文件
生成普通tar文件
require 'minitar' require 'fileutils' # 指定要压缩的源文件夹路径 source_dir = './extracted_files' # 生成新的tar文件 Minitar.pack(source_dir, 'new_release.tar')
生成tar.gz压缩文件
如果需要生成gzip压缩的tar文件:
require 'minitar' require 'zlib' require 'fileutils' source_dir = './extracted_files' Zlib::GzipWriter.open('new_release.tar.gz') do |gz_stream| Minitar.pack(source_dir, gz_stream) end
补充说明
在完成解压后,你可以使用FileUtils的cp、mv等方法完成第二步的文件添加与结构调整,例如:
# 复制额外文件到解压后的文件夹 FileUtils.cp('./extra_file.txt', './extracted_files/') # 移动文件调整结构 FileUtils.mv('./extracted_files/old_path/file.txt', './extracted_files/new_path/')
内容的提问来源于stack exchange,提问作者Flame_Phoenix
相关产品推荐
相关产品推荐

