Extratores universais

19

Com um número crescente de formatos de arquivamento / compactação, existe uma única ferramenta de linha de comando livre / de código aberto para governar todos eles? Talvez algo com um conjunto consistente / unificado de sinalizadores? (observe minha referência implícita e amigável ao alcatrão )

Certa vez, encontrei um conjunto de aliases que simplificavam bastante a tarefa de compactar / descompactar arquivos com ligações a tare outros utilitários, mas não consigo mais encontrar isso.

Atualização: Como posso configurar algo como atoolnão usar unzippara extrair arquivos zip (que aparentemente não podem manipular arquivos maiores que 4 GB) e usá- gunziplos?

$ 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
Amelio Vazquez-Reina
fonte
1
ainda outra solução: packages.qa.debian.org/u/unp.html
frostschutz:
@frostschutz. Você sabe se há algo que pode fazer unpackdiferente atool?
Amelio Vazquez-Reina
Não sei. Como mostra a resposta de Evan, esse programa é bastante trivial. Use o que funciona para você. Para descompactar arquivos zip, minha preferência pessoal é 7z.
Frostschutz
1
@ user815423426 Adicionamos instruções para sua pergunta atualizada na minha resposta existente.
SuperMagic

Respostas:

18

Eu uso Atol . Faz o trabalho. Funciona com muitos, embora nem todos os formatos:

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 alscomando que ele fornece, que lista o conteúdo de qualquer formato de arquivo suportado.

O atoolcomando principal 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, quando eu usei o Ubuntu, ele não estava em seus repositórios na época. E eu instalei a partir de um tarball.).

Atualização nos repositórios : atool está nos repositórios das seguintes distribuições (apenas versões atuais verificadas):

  • Fedora
  • Debian (obrigado @terdon e, presumivelmente, são derivados como o Ubuntu)
  • Ubuntu (qed e, presumivelmente, derivados como Mint)
  • Open Suse
  • CentOS (e, presumivelmente, RHEL)
  • Arch Linux

Tenho certeza de que existem outras ... plausivelmente, a maioria das distribuições modernas.

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

Edite o arquivo de configuração do atool ~/.atoolrce adicione a linha:

path_unzip /usr/bin/gunzip

com o caminho correto para o seu programa gunzip.

Veja a página de manual para a lista completa de variáveis ​​possíveis que você pode colocar neste arquivo de configuração, das quais existem muitas . Se as opções de linha de comando necessárias para o gunzip forem diferentes de descompactar, talvez seja necessário modificar a própria fonte do atool (perl).

SuperMagic
fonte
Obrigado. Isso parece ótimo. Você sabe se, além de poder baixar o tarball, existe um repositório (git / bzr) para ele, ou talvez para um fork dele?
Amelio Vazquez-Reina
Não parece haver um repositório Git para isso. Existe um repositório cvs estremecido: savannah.nongnu.org/cvs/?group=atool . No entanto, a fonte está no tarball e a ferramenta é escrita em perl, tão facilmente modificável por você ou por qualquer pessoa que sinta vontade.
SuperMagic
1
@ user815423426 também está nos repositórios Debian.
terdon
9

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

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
}

Encontrei a versão original dessa função em algum lugar on-line e a modifiquei um pouco para extrair ararquivos e tararquivos compactados xz .

starbeamrainbowlabs
fonte
Isso parece ótimo. Isso é para bash?
Amelio Vazquez-Reina
Eu só testei isso com bashe zsh, mas deve funcionar shtambém.
Isso é excepcionalmente esteticamente agradável para uma função de shell. Uma ressalva seria que você deseja garantir que todos os binários relevantes estejam instalados ou remover as linhas daqueles que não estão instalados.
precisa saber é o seguinte
3

O sistema de arquivos AVFS apresenta uma visão do sistema de arquivos onde todos os arquivos (por exemplo /path/to/foo.zip) estão acessíveis como um diretório ( ~/.avfs/path/to/foo/zip#neste 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 auxiliares externos que podem ser facilmente configurados editando arquivos no /usr(infelizmente não há como no avfs 1.0 usar arquivos no diretório /usr/localou em seu diretório pessoal, você precisa editar /usrou recompilar). /usr/share/avfs/extfs/ext-uzipé o script para lidar com .ziparquivos, altere-o se você não quiser usar /usr/bin/unzip. Você pode se safar do uso do 7z: tente editar /usr/share/avfs/extfs/extfs.inie altere a linha ext-uzippara u7z .zip.

Gilles 'SO- parar de ser mau'
fonte