解压缩文件并忽略 OS X 添加的“垃圾文件”

Mic*_*ruk 4 ruby zip

我使用如下代码在 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
Run Code Online (Sandbox Code Playgroud)

我想忽略 Mac 中 compress zip 生成的所有文件,例如:.DS_Store 等。我怎样才能最好地做到这一点?

Phr*_*ogz 6

我相信这可以满足您的要求:

\n\n
Zip::ZipFile.open(file) do |zip_file|\n  names = zip_file.select(&:file?).map(&:name)\n  names.reject!{|n| n=~ /\\.DS_Store|__MACOSX|(^|\\/)\\._/ }\n  puts names\nend \n
Run Code Online (Sandbox Code Playgroud)\n\n

该正则表达式表示,

\n\n
    \n
  • 丢弃文件\n
      \n
    • .DS_Store名字里有,
    • \n
    • __MACOSX名字里有,
    • \n
    • 或者._在名称 ( ^) 开头或紧接在/.
    • \n
  • \n
\n\n

这应该涵盖所有“垃圾”文件,并希望不会影响任何其他文件。

\n\n

如果您想要的不仅仅是名称\xe2\x80\x94,如果您想处理非垃圾文件\xe2\x80\x94,那么您可以执行以下操作:

\n\n
Zip::ZipFile.open(file) do |zip_file|\n  files = zip_file.select(&:file?)\n  files.reject!{|f| f.name =~ /\\.DS_Store|__MACOSX|(^|\\/)\\._/ }\n  puts files.map(&:names) # or do whatever else you want with the array of files\nend \n
Run Code Online (Sandbox Code Playgroud)\n