Voglio decomprimere un sacco di file zip. C'è un modulo o uno script che controlla quale formato è il file zip e lo decomprime? Questo dovrebbe funzionare su Linux, non mi interessa di altri sistemi operativi.decomprimere (zip, tar, tag.gz) file con rubino
risposta
Per estrarre i file da un file .tar.gz è possibile utilizzare i seguenti metodi di pacchetti distribuiti con Ruby:
require 'rubygems/package'
require 'zlib'
tar_extract = Gem::Package::TarReader.new(Zlib::GzipReader.open('Path/To/myfile.tar.gz'))
tar_extract.rewind # The extract has to be rewinded after every iteration
tar_extract.each do |entry|
puts entry.full_name
puts entry.directory?
puts entry.file?
# puts entry.read
end
tar_extract.close
Ogni voce di tipo Gem::Package::TarReader::Entry punti ad un file o directory all'interno del .tar.gz file.
È possibile utilizzare un codice simile (sostituire Reader with Writer) per scrivere file in un file .tar.gz.
Il modo più semplice è quello di utilizzare probabilmente Zlib
Zlib è una libreria Ruby. Quello che segue è un semplice programma per catturare un file con zip da un particolare URL, decomprimerlo e incollarne il contenuto sullo schermo.
require 'zlib'
require 'open-uri'
uri = "www.somedomain.com/filename.gz"
source = open(uri)
gz = Zlib::GzipReader.new(source)
result = gz.read
puts result
Spero che questo aiuti.
Anche se Florian's answer è corretto, non tiene conto di tar LongLinks (Provare a estrarre jdk-7u40-linux-i586.tar.gz da oracle: P). Il seguente codice dovrebbe essere in grado di fare questo:
require 'rubygems/package'
require 'zlib'
TAR_LONGLINK = '././@LongLink'
tar_gz_archive = '/path/to/archive.tar.gz'
destination = '/where/extract/to'
Gem::Package::TarReader.new(Zlib::GzipReader.open tar_gz_archive) do |tar|
dest = nil
tar.each do |entry|
if entry.full_name == TAR_LONGLINK
dest = File.join destination, entry.read.strip
next
end
dest ||= File.join destination, entry.full_name
if entry.directory?
File.delete dest if File.file? dest
FileUtils.mkdir_p dest, :mode => entry.header.mode, :verbose => false
elsif entry.file?
FileUtils.rm_rf dest if File.directory? dest
File.open dest, "wb" do |f|
f.print entry.read
end
FileUtils.chmod entry.header.mode, dest, :verbose => false
elsif entry.header.typeflag == '2' #Symlink!
File.symlink entry.header.linkname, dest
end
dest = nil
end
end
is ': verbose = > falso? necessario? –
No, non volevo che qualcosa fosse stampato nella mia custodia. –
Draco, thx per voi snippet. Alcuni codici TAR codificano le directory come percorsi che terminano con '/' - vedi Wiki this. Il catrame examlple è Oracle Server JRE 7u80 for Windows. Questo funziona per loro:
require 'fileutils'
require 'rubygems/package'
require 'zlib'
TAR_LONGLINK = '././@LongLink'
Gem::Package::TarReader.new(Zlib::GzipReader.open tar_gz_archive) do |tar|
dest = nil
tar.each do |entry|
if entry.full_name == TAR_LONGLINK
dest = File.join destination, entry.read.strip
next
end
dest ||= File.join destination, entry.full_name
if entry.directory? || (entry.header.typeflag == '' && entry.full_name.end_with?('/'))
File.delete dest if File.file? dest
FileUtils.mkdir_p dest, :mode => entry.header.mode, :verbose => false
elsif entry.file? || (entry.header.typeflag == '' && !entry.full_name.end_with?('/'))
FileUtils.rm_rf dest if File.directory? dest
File.open dest, "wb" do |f|
f.print entry.read
end
FileUtils.chmod entry.header.mode, dest, :verbose => false
elsif entry.header.typeflag == '2' #Symlink!
File.symlink entry.header.linkname, dest
else
puts "Unkown tar entry: #{entry.full_name} type: #{entry.header.typeflag}."
end
dest = nil
end
end
end
- 1. decomprimere un file .zip
- 2. errore quando `` tar` un .zip` su Linux
- 3. Decomprimere un file zip utilizzando zlib
- 4. Decomprimere il file ZIP su Amazon S3
- 5. Come decomprimere un file .zip su iOS?
- 6. Android: Come decomprimere un file zip crittografato
- 7. Come decomprimere cartella specifica da un file .zip con Python
- 8. Homestead: ERR! tar errore decompressione decomprimere
- 9. Node.js - Zip/decomprimere una cartella
- 10. Split file usando tar, gz, zip o bzip2
- 11. Java ZIP - come decomprimere la cartella?
- 12. Caricamento file ZIP su S3, uso EC2 per decomprimere
- 13. Un modo semplice per decomprimere un file .zip usando zlib
- 14. Problemi decomprimere un file tar.gz
- 15. Come decomprimere un file con Python 2.4?
- 16. come decomprimere con pigz
- 17. Come decomprimere la stringa Gzip nel rubino?
- 18. decomprimere un file con PHP
- 19. decomprimere i risultati del file in "BadZipFile: File non è un file zip"
- 20. Come decomprimere/decomprimere in Emacs
- 21. Installa una gemma da un tar o zip scaricato
- 22. Decomprimere NSData senza file temporaneo
- 23. Combinazione di file zip JPG + Zip con formato Zip
- 24. Come decomprimere una cartella zip usando il codice php
- 25. Come aprire e modificare un file * .gz in vim (con auto decomprimere/zip)
- 26. di file gzip decomprimere, da directory specifica
- 27. Decomprimere e salvare i file usando as3?
- 28. Come decomprimere i file ricorsivamente in Java?
- 29. Come scaricare e decomprimere la cartella .ZIP usando Adobe Air?
- 30. Trasposizione di un hash in rubino con zip
Mavryx: Quando io sto cercando il tuo frammento Sto ottenendo il seguente errore: unzip.rb: 5: variabili locali non definita o metodo 'uri' per # (NameError) –
maetthew
@maetthew controlla la riga 4 e assicurati di utilizzare la stessa variabile (uri qui) in entrambe le righe – BurmajaM