代码之家  ›  专栏  ›  技术社区  ›  anjali rai

收集所有同名的zip文件并再次压缩ruby

  •  0
  • anjali rai  · 技术社区  · 6 年前

    我有一个目录,其中包含同一脚本的多个日志和时间戳。我想收集所有的zip文件并制作一个新的zip。

    Directory Structure:
    Test_1_Run_Logs_06-12-2018_10_15_35.zip
    Test_1_Integration_Logs_06-12-2018_10_15_35.zip
    Test_1_Interface_Logs_06-12-2018_10_15_35.zip
    Test_2_Run_Logs_06-12-2018_10_30_35.zip
    Test_2_Integration_Logs_06-12-2018_10_30_35.zip
    Test_2_Interface_Logs_06-12-2018_10_30_35.zip
    

    我把所有同名的文件都分开了。zip文件不会移动所有的zip文件。如何用ruby做

    Code
    require 'fileUtils'
    require 'zip'
    scriptNameArr = []
    logFolder = 'C:/Users/Desktop/logs/'
    copyFolder = "C:/Users/admin/Desktop/Test/Ruby Test/copyFolder/"
    
    # Collect all the files present in logFolder separating by timestamp
    Dir.entries("#{logFolder}/").each do |fName|
        unless (File.directory? "#{logFolder}#{fName}")
             scriptNameArr << fName.split("/").last.split(/_\d+-\d+-/)[0]
        end
    end
    scriptNameArr.uniq!
    
    # Create a new zip into copy 
    scriptNameArr.each do |scriptName|
        zipName = "#{copyFolder}#{scriptName}.zip"
        Dir.mkdir(copyFolder) unless (Dir.exist?(copyFolder))
        FileUtils.rm(zipName) if File.exist? (zipName)
        Zip::File.open(zipName, Zip::File::CREATE) do |zip|
             Dir.glob("#{logFolder}#{scriptName}*") { |file|
                 fileName = file.split("/").last
                 zip.add(fileName, logFolder)
             }
        end
    end
    

    它每次都在创建空的zip。我该怎么做才能复制zip文件并粘贴到新位置?

    1 回复  |  直到 6 年前
        1
  •  0
  •   Junsuk Park    6 年前



    我想你想念文件名的时候 zip.add(fileName, logFolder)

    对的: zip.add(fileName, File.join(logFolder, fileName))

    快乐编码!:)