TarWriter 帮助添加多个目录和文件
TarWriter help adding multiple directories and files
this question 中的代码有效,但仅适用于单个目录。我也可以让它输出一个文件存档。但不能同时是文件和目录,或两个目录。我希望让它与路径列表一起工作,包括都放在同一个存档中的目录和文件。如果我尝试添加多个路径,tar 文件就会损坏。我以为我可以继续添加 files/data 来存档,只要 TarWriter 对象是打开的。
问题:除了 如何让上面的示例与多个路径一起工作(在链接 post 中),有人可以帮助 解释如何将文件和目录添加到存档中? 我查看了目录 structure/format,但我似乎无法理解为什么这对多个目录不起作用 directory/file.谢谢!
您可以向 Dir
对象添加多个路径
Dir[File.join(path1, '**/*'), File.join(path2, '**/*')]
之后的代码将是这样的:
BLOCKSIZE_TO_READ = 1024 * 1000
def create_tarball(path)
tar_filename = Pathname.new(path).realpath.to_path + '.tar'
File.open(tar_filename, 'wb') do |tarfile|
Gem::Package::TarWriter.new(tarfile) do |tar|
Dir[File.join(path1, '**/*'), File.join(path2, '**/*')].each do |file|
mode = File.stat(file).mode
relative_file = file.sub(/^#{ Regexp.escape(path) }\/?/, '')
if File.directory?(file)
tar.mkdir(relative_file, mode)
else
tar.add_file(relative_file, mode) do |tf|
File.open(file, 'rb') do |f|
while buffer = f.read(BLOCKSIZE_TO_READ)
tf.write buffer
end
end
end
end
end
end
end
tar_filename
end
this question 中的代码有效,但仅适用于单个目录。我也可以让它输出一个文件存档。但不能同时是文件和目录,或两个目录。我希望让它与路径列表一起工作,包括都放在同一个存档中的目录和文件。如果我尝试添加多个路径,tar 文件就会损坏。我以为我可以继续添加 files/data 来存档,只要 TarWriter 对象是打开的。
问题:除了 如何让上面的示例与多个路径一起工作(在链接 post 中),有人可以帮助 解释如何将文件和目录添加到存档中? 我查看了目录 structure/format,但我似乎无法理解为什么这对多个目录不起作用 directory/file.谢谢!
您可以向 Dir
对象添加多个路径
Dir[File.join(path1, '**/*'), File.join(path2, '**/*')]
之后的代码将是这样的:
BLOCKSIZE_TO_READ = 1024 * 1000
def create_tarball(path)
tar_filename = Pathname.new(path).realpath.to_path + '.tar'
File.open(tar_filename, 'wb') do |tarfile|
Gem::Package::TarWriter.new(tarfile) do |tar|
Dir[File.join(path1, '**/*'), File.join(path2, '**/*')].each do |file|
mode = File.stat(file).mode
relative_file = file.sub(/^#{ Regexp.escape(path) }\/?/, '')
if File.directory?(file)
tar.mkdir(relative_file, mode)
else
tar.add_file(relative_file, mode) do |tf|
File.open(file, 'rb') do |f|
while buffer = f.read(BLOCKSIZE_TO_READ)
tf.write buffer
end
end
end
end
end
end
end
tar_filename
end