Como extrair rapidamente todos os tipos de arquivos arquivados da linha de comando?

11

Muitas vezes eu preciso extrair diferentes tipos de arquivos arquivados usando a linha de comando. Mas nem sempre me lembro do comando exato para qualquer tipo de arquivo morto. Então, eu tenho que perder tempo e procurar novamente. Como posso evitar isso?

Radu Rădeanu
fonte
11
Veja também atool, com o qual você pode extrair / empacotar vários formatos: veja a resposta que dei para esta pergunta: linha de comando-arquivo-gerenciador-extrator . Essa pergunta também é uma duplicata da pergunta, portanto eles provavelmente devem ser mesclados.

Respostas:

15

O dtrxcomando é seu amigo nesse assunto.

Ele descompacta qualquer arquivo morto, adivinhando seu tipo. Ele também garantirá que os arquivos descompactados sejam colocados em um novo diretório; evitando bagunçar o diretório de trabalho atual com toneladas de arquivos.

Instalar

sudo aptitude install dtrx

Uso

dtrx stuff.zip
Thomasleveil
fonte
11

Você pode usar o seguinte script de shell (eu o nomeei extracte o coloquei ~/bin):

#! / bin / bash

se [$ # -lt 1]; então
  echo "Uso:` basename $ 0` FILES "
  saída 1
fi

# Encontrei a seguinte função em https://unix.stackexchange.com/a/168/37944 
#, que a aprimorei um pouco. Muito obrigado a sydo por essa idéia.
extrair () {
    para arg em $ @; Faz
        se [-f $ arg]; então
            case $ arg in
                * .tar.bz2) tar xjf $ arg ;;
                * .tar.gz) tar xzf $ arg ;;
                * .bz2) bunzip2 $ arg ;;
                * .gz) gunzip $ arg ;;
                * .tar) tar xf $ arg ;;
                * .tbz2) tar xjf $ arg ;;
                * .tgz) tar xzf $ arg ;;
                * .zip) descompacte $ arg ;;
                * .Z) descompacte $ arg ;;
                * .rar) rar x $ arg ;; # 'rar' deve ser instalado
                * .jar) jar -xvf $ arg ;; # 'jdk' deve estar instalado
                *) echo "'$ arg' não pode ser extraído via extract ()" ;;
            esac
        outro
            echo "'$ arg' não é um arquivo válido"
        fi
    feito
}

extrair $ @

Não se esqueça de tornar o script executável:

chmod +x ~/bin/extract

Uso:

extrair arquivo_1 arquivo_2 ... arquivo_n 
Radu Rădeanu
fonte
Agradável. Acho que o zip às vezes é extraído no diretório atual, quando eu quero que ele seja seu próprio subdiretório. Usar descompactar -d basename $argpode ajudar.
Crafter