I am using code like the following to unzip files in Ruby:
def unzip_file (file)
  Zip::ZipFile.open(file) do |zip_file|
    zip_file.each do  |f| 
      puts f.name if f.file?
    end
  end
end
I would like to ignore all files generated by compress zip in Mac such as: .DS_Store, etc. How can I best do it?
I believe that this does what you want:
Zip::ZipFile.open(file) do |zip_file|
  names = zip_file.select(&:file?).map(&:name)
  names.reject!{|n| n=~ /\.DS_Store|__MACOSX|(^|\/)\._/ }
  puts names
end 
That regular expression says,
.DS_Store in the name,__MACOSX in the name,._ at the beginning of the name (^) or right after a /.That should cover all the 'junk' files and hopefully not hit any others.
If you want more than just the names—if you want to process the non-junk files—then instead you might do the following:
Zip::ZipFile.open(file) do |zip_file|
  files = zip_file.select(&:file?)
  files.reject!{|f| f.name =~ /\.DS_Store|__MACOSX|(^|\/)\._/ }
  puts files.map(&:names) # or do whatever else you want with the array of files
end 
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With