Curiosidade: Se você usa o Archive Manager e extrai um .tar.gz para desmarcar a opção "Manter a estrutura de diretórios", obterá uma 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 de diretórios?
tar xvzf my_tar.tar.gz --transform 's/.*\///'
. Mas, infelizmente, isso não muda a forma como é exibido em uma listagem emt
vez dex
.Respostas:
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 nos nomes dos arquivos:
Como funciona
Ao definir o separador de campos como
/
, o último campoawk
sabe sobre ($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 final aos nomes de diretório). Então, estamos dizendoawk
para imprimir o último campo, se não estiver vazio.fonte
Utilizando uma sugestão de Joseph R. pode usar o regex
[^/]$
paragrep
para os arquivos, procurando por linhas não terminando com/
.tar tzf archive.tar.gz | grep -e "[^/]$"
fonte
foo/bar
em oposição a apenasbar
. Você quergrep -Eo '[^/]+$'
(com GNU grep).Supondo que nenhum dos nomes de arquivo contenha novas linhas:
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 agora estão vazias, ou seja, as linhas que terminam em a/
, que são diretórios.fonte
Com
pax
(o comando POSIX para lertar
arquivos):(que lista todos os arquivos, independentemente de seu tipo, incluindo diretórios).
fonte