Quiero descomprimir un montón de archivos zip. ¿Hay algún módulo o script que compruebe qué formato es el archivo zip y lo descomprime? Esto debería funcionar en Linux, no me importan otros sistemas operativos.descomprimir archivos (zip, tar, tag.gz) con ruby
Respuesta
para extraer archivos de un archivo .tar.gz se pueden utilizar los siguientes métodos de paquetes distribuidos 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
Cada entrada del tipo Gem::Package::TarReader::Entry puntos a un archivo o directorio dentro del .tar.gz archivo.
Se puede usar un código similar (reemplace Reader with Writer) para escribir archivos en un archivo .tar.gz.
La forma más sencilla es utilizar probablemente Zlib
Zlib es una biblioteca de Ruby. Lo que sigue es un programa simple para tomar un archivo comprimido de una URL en particular, descomprimirlo y pegar sus contenidos en la pantalla.
require 'zlib'
require 'open-uri'
uri = "www.somedomain.com/filename.gz"
source = open(uri)
gz = Zlib::GzipReader.new(source)
result = gz.read
puts result
Espero que esto ayude.
Aunque Florian's answer es correcto, no tiene en cuenta tar LongLinks (Intente extraer jdk-7u40-linux-i586.tar.gz de oráculo: P). El siguiente código debe ser capaz de hacer esto:
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
es ': verbose = > falso' necesario? –
No, simplemente no quería que se imprimiera nada en mi caso de uso. –
Draco, THX para usted snippet. Algunos TAR codifican directorios como rutas que terminan con '/' - vea this Wiki. Examlple tar es Oracle Server JRE 7u80 for Windows. Esto funcionará para ellos:
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. Android: descomprimir archivos zip codificados con contraseña
- 2. Descomprimir archivos zip anidados en python
- 3. archivos descomprimir zip con JavaScript en Firefox 3.6
- 4. Ruby/rubyzip alternativa capaz de manejar rar/tar/zip/7z?
- 5. Carga de archivos ZIP en S3, uso EC2 para descomprimir
- 6. Ruby streaming tar/gz
- 7. Java ZIP - ¿cómo descomprimir la carpeta?
- 8. descomprimir archivos más grandes con PHP
- 9. Descomprimir las cremalleras interiores en zip con Maven
- 10. Descomprimir archivos tgz usando Ant
- 11. Descomprimir archivo ZIP en Amazon S3
- 12. Cómo descargar y descomprimir la carpeta .ZIP con Adobe Air?
- 13. Cómo descomprimir un archivo TAR utilizando Apache Commons
- 14. Descomprimir el archivo BZIP2
- 15. Cómo descomprimir un archivo zip C#
- 16. Android: Cómo descomprimir un archivo zip encriptado
- 17. JavaScript: Descomprimir/inflar/descomprimir/descomprimir cadenas
- 18. ¿Cómo descomprimir archivos recursivamente en Java?
- 19. ¿Utiliza SharpZipLib para descomprimir archivos específicos?
- 20. Forma simple de descomprimir un archivo .zip usando zlib
- 21. Cómo descomprimir una carpeta zip usando el código php
- 22. Ruby zip una secuencia
- 23. ¿Cómo descomprimir un archivo en Ruby on Rails?
- 24. Instalar una gema de un archivo tar o zip descargado
- 25. ¿Cuál es la diferencia entre tar y zip?
- 26. Librerías Gzip/TAR para Javascript
- 27. Cómo abrir y editar un archivo * .gz dentro de vim (con auto descomprimir/zip)
- 28. ¿Cómo lidiar con el archivo zip?
- 29. C# Eliminar un archivo .ZIP después de descomprimir
- 30. descomprimir un archivo ZIP en Windows 8 C#
Mavryx: Cuando estoy tratando el fragmento que estoy recibiendo el siguiente error: unzip.rb: 5: variable local no está definido o método 'uri' para # (NameError) –
maetthew
@maetthew marque la línea 4 y asegúrese de usar la misma variable (uri aquí) en ambas líneas – BurmajaM