Descompactando o arquivo para uma única pasta

4

Talvez este seja o auge dos problemas do primeiro mundo, mas depois de anos de angústia eu só tenho que transmitir isso.

Digamos que você tenha baixado funtool.zip na sua pasta ~/Downloads . Você tem duas opções, cada uma com dois resultados possíveis, dependendo se o arquivo tem uma pasta raiz adequada.

unzip funtool . Resultados possíveis:

  • ~/Downloads/funtool/(files) - bom
  • ~/Downloads/(lots of files) - AUGH! Faça o download da pasta cheia de lixo

unzip funtool -d funtool . Resultados possíveis:

  • ~/Downloads/funtool/funtool/(files) - pastas duplas. Irritante!
  • ~/Downloads/funtool/(files) - bom

Eu já vi alguns descompressores de GUI terem inteligência embutida para isso, mas eu sou um cara do CLI. Minha solução é verificar uma pasta raiz em unzip -t funtool e agir de acordo. Mas depois de anos, eu tive isso.

Existe um script ou algo que faz isso automaticamente, mesmo para rar arquivos e possivelmente 7z ? Pelo menos isso é uma coisa que tar parece acertar todas as vezes, talvez por causa de boas convenções.

    
por forthrin 11.04.2018 / 13:20

3 respostas

1

Como uma interface CLI para vários formatos de arquivo, existe unp , descompacta (quase) tudo com um comando .

E afirma ter essas opções:

   -u Special helper mode.
      For most archive types:
      - create directory <filename without suffix>/
      - extract contents there
      For Debian/Ubuntu packages:
      - extract data.tar.gz after each operation in local directory
      - extract control.tar.gz into control/<package_version_arch>/
   -U Smart mode, acts like -u (see above) if archive contains multiple
      elements but if there is only one file/directory element then it's stored 
      in the current directory.

E isso soa como se estivesse próximo do comportamento que você está procurando.

No entanto, o modo -U ainda cria um único arquivo se for um ZIP com um único arquivo que não está relacionado de forma alguma com o nome do arquivo zip em si.

    
por 11.04.2018 / 13:32
0

7z pode fazer isso, pelo menos, se o diretório raiz do arquivo (se houver) corresponder ao nome do diretório para o qual você está extraindo:

7z x -spe funtool.zip -ofuntool

Se o conteúdo de funtool.zip estiver dentro de um diretório funtool no arquivo, 7z não duplicará o diretório abaixo de funtool , dando a você o resultado desejado.

    
por 11.04.2018 / 13:29
0

Existe a ferramenta de linha de comando dtrx , que é capaz de extrair qualquer tipo de arquivo compactado. Por padrão, tudo será gravado em um diretório dedicado que tenha o nome do arquivo.

Basta executar

dtrx <archive_name>

Se você tem uma distribuição baseada no Debian, você pode encontrá-la no repositório do APT.

    
por 11.04.2018 / 13:36

Tags