Я считаю, что это делает то, что вы хотите:
Zip::ZipFile.open(file) do |zip_file|
names = zip_file.select(&:file?).map(&:name)
names.reject!{|n| n=~ /\.DS_Store|__MACOSX|(^|\/)\._/ }
puts names
end
Это регулярное выражение говорит,
- Выбрасывайте файлы
- , которые имеют
.DS_Store
вимя - с
__MACOSX
в имени - или с
._
в начале имени (^
) или сразу после /
.
Это должно охватывать все «ненужные» файлы и, надеюсь, не затрагивать другие.
Если вы хотите больше, чем просто имена - если вы хотите обработатьне ненужные файлы - тогда вместо этого вы можете сделать следующее:
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