Extractores universales


19

Con un número cada vez mayor de formatos de archivo de compresión / archivo, ¿existe una única herramienta de línea de comandos de código abierto / libre para gobernarlos a todos? ¿Quizás algo con un conjunto consistente / unificado de banderas? (tenga en cuenta mi referencia implícita amigable a tar )

Una vez me encontré con un conjunto de alias destinados a simplificar en gran medida la tarea de comprimir / descomprimir archivos con enlaces tary otras utilidades, pero ya no puedo encontrar esto.

Actualización: ¿Cómo puedo configurar algo como atoolno usar unzippara extraer archivos zip (que aparentemente no pueden manejar archivos de más de 4 GB) y usar gunzipen su lugar?

$ aunpack large_file.zip
error:  Zip file too big (greater than 4294959102 bytes)
Archive:  large_file.zip
warning [large_file.zip]:  1491344848 extra bytes at beginning or within zipfile
  (attempting to process anyway)
error [large_file.zip]:  start of central directory not found;
  zipfile corrupt.
  (please check that you have transferred or created the zipfile in the
  appropriate BINARY mode and that you have compiled UnZip properly)
aunpack: unzip ...: non-zero return-code


@frostschutz. ¿Sabes si hay algo que pueda hacer unpackdiferente atool?
Amelio Vazquez-Reina

No sé. Como muestra la respuesta de Evan, dicho programa es bastante trivial. Usa lo que sea que funcione para ti. Para descomprimir archivos zip, mi preferencia personal es 7z.
frostschutz

1
@ user815423426 He agregado instrucciones para su pregunta actualizada a mi respuesta existente.
SuperMagic

Respuestas:


18

Yo uso atool . Hace el trabajo Funciona con muchos, aunque no todos los formatos:

tar, gzip, bzip2, bzip, lzip, lzop, lzma, zip, rar, lha, arj, arc, p7zip, etc.

Estas herramientas de compresión todavía son necesarias, aunque atool es simplemente una interfaz para ellos.

En particular me gusta el als comando que proporciona que enumera el contenido de cualquier formato de archivo compatible.

El principal atool comando utiliza sus propios indicadores para extraer archivos (pasando los indicadores apropiados a las herramientas de extracción subyacentes específicas).

Ah, y está en los repositorios de algunas distribuciones (Fedora en mi caso, aunque, según recuerdo, cuando usé Ubuntu no estaba en sus repositorios, e instalé desde un tarball).

Actualización en repositorios : atool se encuentra en los siguientes repositorios de distribuciones (solo versiones actuales verificadas):

  • Fedora
  • Debian (gracias @terdon, y, presumiblemente, son derivados como Ubuntu)
  • Ubuntu (qed y, presumiblemente, derivados como Mint)
  • Suse abierto
  • CentOS (y, presumiblemente, RHEL)
  • Arch Linux

Estoy seguro de que hay otros ... plausiblemente, la mayoría de las distribuciones modernas.

Respuesta a la pregunta actualizada "¿Cómo puedo configurar algo como atool para no usar descomprimir para extraer archivos zip ... y usar gunzip en su lugar" :

Edite el archivo de configuración de atool ~/.atoolrcy agregue la línea:

path_unzip /usr/bin/gunzip

con la ruta correcta a su programa gunzip.

Consulte la página de manual para ver la lista completa de posibles variables que puede incluir en este archivo de configuración, de las cuales hay muchas . Si las opciones de línea de comando necesarias para gunzip son diferentes de descomprimir, es posible que deba modificar la fuente de herramienta (perl) en sí.


Gracias. Esto se ve genial. ¿Sabes si, además de poder descargar el tarball, hay un repositorio (git / bzr) para él, o tal vez para una bifurcación?
Amelio Vazquez-Reina

No parece haber un repositorio git para ello. Hay un, estremecimiento, cvs repo: savannah.nongnu.org/cvs/?group=atool . Sin embargo, la fuente está en el tarball y la herramienta está escrita en perl, tan fácilmente modificable por usted o cualquier persona que sienta la necesidad.
SuperMagic

1
@ user815423426 también está en los repositorios de Debian.
terdon

9

Aquí hay una pequeña función de shell que se encarga de varios tipos de archivos.

extract () {
    if [ ! -f "$1" ] ; then
        echo "'$1' does not exist."
        return 1
    fi

    case "$1" in
        *.tar.bz2)   tar xvjf "$1"   ;;
        *.tar.xz)    tar xvJf "$1"   ;;
        *.tar.gz)    tar xvzf "$1"   ;;
        *.bz2)       bunzip2 "$1"    ;;
        *.rar)       rar x "$1"      ;;
        *.gz)        gunzip "$1"     ;;
        *.tar)       tar xvf "$1"    ;;
        *.tbz2)      tar xvjf "$1"   ;;
        *.tgz)       tar xvzf "$1"   ;;
        *.zip)       unzip "$1"      ;;
        *.Z)         uncompress "$1" ;;
        *.xz)        xz -d "$1"      ;;
        *.7z)        7z x "$1"       ;;
        *.a)         ar x "$1"       ;;
        *)           echo "Unable to extract '$1'." ;;
    esac
}

Encontré la versión original de esta función en algún lugar en línea y la modifiqué un poco para extraer ararchivos comprimidos y xz tar.


Esto se ve genial. ¿Esto es para bash?
Amelio Vazquez-Reina

Solo he probado esto con bashy zsh, pero también debería funcionar sh.

Esto es excepcionalmente estéticamente agradable para una función de carcasa. Una advertencia sería que querrás asegurarte de que tienes todos los binarios relevantes instalados o eliminar las líneas de aquellos que no tienes instalados.
bgvaughan

3

El sistema de archivos AVFS presenta una vista del sistema de archivos donde /path/to/foo.zipse puede acceder a cada archivo (por ejemplo ) como un directorio ( ~/.avfs/path/to/foo/zip#para este ejemplo). AVFS proporciona acceso de solo lectura a los formatos de archivo de almacenamiento más comunes.

mountavfs
cp -Rp ~/.avfs$PWD/large_file.zip\# extraction_directory

Avfs utiliza ayudantes externos que se pueden configurar fácilmente editando archivos /usr(desafortunadamente, a partir de avfs 1.0 no hay forma de usar archivos en /usr/localo en su directorio de inicio, necesita editar archivos /usro recompilarlos). /usr/share/avfs/extfs/ext-uzipes el script para manejar .ziparchivos, cámbielo si no desea usarlo /usr/bin/unzip. Es posible que pueda salirse con la suya usando 7z: intente editar /usr/share/avfs/extfs/extfs.iniy cambie la línea ext-uzipa u7z .zip.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.