Como descompactar um arquivo (ex: foo.zip
) para uma pasta com o mesmo nome ( foo/
)?
Basicamente, quero criar um alias de unzip que descompacte os arquivos em uma pasta com o mesmo nome (em vez da pasta atual). É assim que o utilitário de descompactação do Mac funciona e eu quero fazer o mesmo na CLI.
Eu uso
unar
para isso; por padrão, se um arquivo contém mais de um arquivo ou diretório de nível superior, ele cria um diretório para armazenar o conteúdo extraído, nomeado após o arquivo da maneira que você descreve:Você pode forçar a criação de um diretório em todos os casos com a
-d
opção:Alternativamente, uma função pode fazer isso com
unzip
:o
linha remove a
.zip
extensão, sem considerar qualquer outra coisa (assimfoo.zip
se tornafoo
, e~/foo.zip
se torna~/foo
). oexpansão de parâmetro remove qualquer coisa até o último
/
, então~/foo
se tornafoo
. Isso significa que a função extrai qualquer.zip
arquivo para um diretório com o nome dele, no diretório atual. Useunzip $1 -d "${target}"
se desejar extrair o arquivo para um diretório ao lado dele.Use unzip -d exdir zipfile.zip para extrair um arquivo zip em um diretório específico. Em princípio, lendo seu post literalmente, você poderia escrever uma função como esta:
Como você deseja que a extensão .zip seja removida, você pode usar a sintaxe de variável especial para fazer isso:
Apenas mais uma variante para fazer isso com um 1-liner para vários arquivos zip no diretório atual:
Para apenas um arquivo (ou seja, para usar em uma função), seria: