Распаковка файла и игнорирование «ненужных файлов», добавленных OS X - PullRequest
2 голосов
/ 01 февраля 2012

Я использую код, подобный следующему, чтобы разархивировать файлы в 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

Я хотел бы игнорировать все файлы, сгенерированные сжатием zip в Mac, такие как: .DS_Store и т. Д. Как я могу лучше всегосделать это?

1 Ответ

3 голосов
/ 01 февраля 2012

Я считаю, что это делает то, что вы хотите:

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 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...