Extratores universais

19

Com um número crescente de formatos de arquivo / compressão, existe uma única ferramenta de linha de comando gratuita / de código aberto? governá-los todos? Talvez algo com um conjunto consistente / unificado de sinalizadores? (note minha amigável referência implícita ao tar )

Uma vez eu me deparo com um conjunto de apelidos para simplificar a tarefa de compactar / descomprimir arquivos com ligações para tar e outros utilitários, mas não consigo mais encontrar isso.

Atualização: Como posso configurar algo como atool para não usar unzip para extrair arquivos zip (que aparentemente não podem manipular arquivos maiores que 4GB) e usar gunzip ?

$ 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
    
por Amelio Vazquez-Reina 22.04.2013 / 22:55

3 respostas

15

Eu uso atool . Isso faz o trabalho. Funciona com muitos formatos, embora nem todos:

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

Essas ferramentas de compactação ainda são necessárias, embora o atool seja simplesmente um front-end para elas.

Gosto particularmente do comando als que fornece o conteúdo de qualquer formato de arquivo suportado.

O comando principal atool usa seus próprios sinalizadores para extrair arquivos (passando os sinalizadores apropriados para as ferramentas de extração subjacentes específicas).

Ah, e está nos repositórios de algumas distribuições (o Fedora no meu caso, embora eu me lembre de quando usei o Ubuntu, ele não estava em seus repositórios então. e eu instalei a partir de um tarball).

Atualização em Repositórios : o atool está nos repositórios de distribuição a seguir (somente releases atuais verificados):

  • Fedora
  • Debian (obrigado @terdon e, presumivelmente, são derivados como o Ubuntu)
  • Ubuntu (q.e.d. e, presumivelmente, derivados como Menta)
  • Abrir Suse
  • CentOS (e, presumivelmente, RHEL)
  • Arch Linux

Tenho certeza de que há outros ... plausivelmente, a maioria das distribuições modernas.

Resposta para a pergunta atualizada "Como configurar algo como o atool para não usar descompactar para extrair arquivos zip ... e usar gunzip" :

Edite o arquivo de configuração atool ~/.atoolrc e adicione a linha:

path_unzip /usr/bin/gunzip

com o caminho correto para o seu programa de gunzip.

Veja na man page a lista completa de variáveis possíveis que você pode colocar neste arquivo de configuração, das quais existem muito . Se as opções de linha de comando necessárias para o gunzip forem diferentes de descompactar, você pode ter que modificar a própria fonte de atool (perl).

    
por 22.04.2013 / 23:02
9

Aqui está uma pequena função de shell que cuida de vários tipos de arquivos.

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
}

Eu encontrei o original versão desta função em algum lugar on-line e modificou um pouco para extrair ar archives e xz arquivos compactados tar .

    
por 22.04.2013 / 23:11
3

O sistema de arquivos AVFS apresenta uma visão do sistema de arquivos, onde cada arquivo (ex. /path/to/foo.zip ) é acessível como um diretório ( ~/.avfs/path/to/foo/zip# para este exemplo). O AVFS fornece acesso somente leitura aos formatos de arquivo mais comuns.

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

O Avfs usa ajudantes externos que podem ser facilmente configurados editando arquivos em /usr (infelizmente não há como o avfs 1.0 usar arquivos em /usr/local ou em seu diretório pessoal, você precisa editar arquivos em /usr ou recompilar). /usr/share/avfs/extfs/ext-uzip é o script para lidar com .zip arquivos, altere-o se você não quiser usar /usr/bin/unzip . Você pode usar o 7z: tente editar /usr/share/avfs/extfs/extfs.ini e mude a linha ext-uzip para u7z .zip .

    
por 24.04.2013 / 02:42