lista de arquivos tar apenas

13

Curiosidade: Se você usar Gerenciador de arquivamento e extrair um .tar.gz para que você tenha "Manter estrutura do diretório" desmarcada, você receberá um tarbomb .

tar -ztf lista todos os arquivos e diretórios em um arquivo tar. Existe uma maneira de listar todos os arquivos em um arquivo tar, sem a estrutura do diretório?

    
por Eero Aaltonen 15.11.2013 / 14:20

4 respostas

15

Não vejo uma maneira de fazer isso na página de manual, mas você sempre pode filtrar os resultados. O seguinte não assume novas linhas em seus nomes de arquivos:

tar tzf your_archive | awk -F/ '{ if($NF != "") print $NF }'

Como funciona

Definindo o separador de campo como / , o último campo awk conhecido ( $NF ) é o nome do arquivo se estiver processando um nome de arquivo ou vazio se estiver processando um nome de diretório ( tar adiciona uma barra à direita dos nomes dos diretórios). Então, basicamente, estamos dizendo awk para imprimir o último campo, se não estiver vazio.

    
por 15.11.2013 / 14:34
4

Supondo que nenhum dos nomes de arquivo contenha novas linhas:

tar -tf foo.tar | sed -e 's#.*/##' -e '\#.#!d'

O primeiro comando sed remove tudo antes do último / em uma linha, para que apenas a parte do nome do arquivo seja impressa. O segundo comando exclui as linhas que estão vazias, isto é, as linhas que terminam em / , que são diretórios.

    
por 16.11.2013 / 23:11
4

Utilizando a sugestão de Joseph R., pode-se usar o regex [^/]$ to grep para os arquivos, procurando por linhas que não terminem com / .

tar tzf archive.tar.gz | grep -e "[^/]$"

    
por 26.05.2015 / 16:41
2

Com pax (o comando POSIX para ler os arquivos tar ):

pax -'s@.*/@@' < file.tar

(que lista todos os arquivos, independentemente do seu tipo, incluindo diretórios).

    
por 01.09.2018 / 11:08

Tags