我使用如下代码在 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 等。我怎样才能最好地做到这一点?
我相信这可以满足您的要求:
\n\nZip::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 \nRun Code Online (Sandbox Code Playgroud)\n\n该正则表达式表示,
\n\n.DS_Store名字里有,__MACOSX名字里有,._在名称 ( ^) 开头或紧接在/.这应该涵盖所有“垃圾”文件,并希望不会影响任何其他文件。
\n\n如果您想要的不仅仅是名称\xe2\x80\x94,如果您想处理非垃圾文件\xe2\x80\x94,那么您可以执行以下操作:
\n\nZip::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 \nRun Code Online (Sandbox Code Playgroud)\n