Projetos respeitáveis liberar arquivos tar que contêm um único diretório, por exemplo zyrgus-3.18.tar.gz
contém uma zyrgus-3.18
pasta que por sua vez contém src
, build
, dist
, etc.
Mas alguns projetos punk colocam tudo na raiz: '- (Isso resulta em uma bagunça total ao desarquivar. Criar uma pasta manualmente toda vez é doloroso e desnecessário na maioria das vezes.
- Existe uma maneira super rápida de saber se um arquivo .tar ou .tar.gz contém mais de um diretório único em sua raiz? Mesmo para um grande arquivo.
- Ou melhor ainda, existe uma ferramenta que, nesses casos, criaria um diretório (nome do arquivo sem a extensão) e colocaria tudo dentro?
But some punk projects put everything at the root :'-(
E alguns projetos punk colocam tudo dentro de uma pasta completamente desnecessariamente, considerando que eles já estão colocando tudo dentro de um arquivo anexo, de modo que, quando você o baixa e descompacta em uma pasta própria, como qualquer usuário inteligente faria, você acaba com todos os conteúdo enterrado outra camada abaixo. ;-)Respostas:
O patool lida com diferentes tipos de arquivos e cria um subdiretório, caso o arquivo contenha vários arquivos para evitar a confusão do diretório de trabalho com os arquivos extraídos.
Extrair arquivo
Para obter uma lista dos formatos suportados, use
patool formats
.fonte
alien
convertê-lo em um deb para o Ubuntu.patool
deve estar nos repositórios para Debian e Ubuntu se você estiver executando uma versão atual.Você poderia fazer algo como
para ver quais entradas de nível superior um alcatrão possui; canalize para
wc -l
verificar se há mais de um. Observe que existem alguns casos em que isso falhará, por exemplo, se o tar contiver caminhos de arquivo do formuláriosomedir/whatever
e também./somedir/whatever
(ou algo mais louco); isso deve ser incomum, no entanto.Isso lerá o arquivo tar inteiro antes de produzir qualquer coisa, por causa do
sort
, embora deva ser mais rápido do que realmente extrair, porque é apenas uma leitura seqüencial e pode pular arquivos grandes.Se você estiver fazendo isso de maneira interativa e o arquivo puder ser grande, poderá alterar
sort -u
parauniq
e Control+ Cse imprimir mais de uma coisa.fonte
sort | uniq
pode ser reduzido parasort -u
.uniq -c
você pode fazer:
... para listar o conteúdo de um
tar
arquivo.se você quiser saber quantos níveis de profundidade existem, você pode:
você pode proibir explicitamente uma explosão na extração com:
fonte
Isso deve fazer o que você quiser. Tenho certeza que alguém pode melhorá-lo. Nestes exemplos, assumo um arquivo tar compactado gzip, já que este é o mais comum.
Você deseja um archive em que não haja nós irmãos na árvore de diretórios no nível raiz.
Cada entrada na lista de conteúdo tar deve começar com o mesmo padrão. Esse padrão é o caminho do diretório base que todas as entradas no arquivo morto devem compartilhar. Se duas entradas não começarem com o mesmo padrão, elas serão irmãos.
A primeira linha na lista de conteúdo tar fornecerá o padrão mínimo que você precisa verificar. Este é o BASEPATH.
Então, para teste de tarballs explosivos que você precisa verificar se qualquer linha da lista de teor de alcatrão não começar com o BasePath.
Transforme isso em uma função shell:
A partir daqui, você pode escrever uma função segura de extração de arquivos tar.
fonte
aunpack archive.tar
é o que eu uso.Parte do bom e velho pacote de ferramentas . Página de manual: https://linux.die.net/man/1/atool
fonte