Isso deve funcionar:
tar -tzf archive.tar.gz | sed 's@^//*@@' | sort -r | xargs -d '\n' rm -d
Se o seu arquivo contiver caminhos absolutos e você tiver descompactado para os locais absolutos (para isso, você precisa usar a opção -P de tar ) você tem que deixar de fora sed . Você também pode deixar sed out, se tiver certeza absoluta de que não há caminhos absolutos no seu arquivo.
tar -tzf archive.tar.gz | sort -r | xargs -d '\n' rm -d
Explicação
Você pode obter uma lista dos arquivos em um arquivo tar.gz usando a opção -t :
tar -tzf archive.tar.gz
Se houver a menor chance de haver caminhos absolutos no seu arquivo e você não descompactar usando a opção -P para o tar (que descompactaria para os locais absolutos em vez do atual ou determinado diretório), você precisa remover as barras iniciais da lista de arquivos, porque tar -tf sempre as mostrará. sed pode ajudar com isso:
tar -tzf archive.tar.gz | sed 's@^//*@@'
Leva o padrão entre o primeiro e o segundo @ - ^//* , que corresponde a um ou mais / no início de uma linha, e o substitui pela sequência entre o segundo e o terceiro @ . neste caso sem nada, efetivamente removendo o jogo.
Com xargs você pode a saída de um comando como argumentos para outro:
tar -tzf archive.tar.gz | sed 's@^//*@@' | xargs -d '\n' rm
Isso pega a lista de arquivos, delimitada por novas linhas ( -d '\n' ) e os passa para rm . Isso excluirá qualquer arquivo. Como de costume, os diretórios não serão removidos e você receberá uma mensagem de erro para cada um.
Para obter também qualquer diretório criado pela descompactação anterior, você precisará usar rm -d , que também excluirá os diretórios empty . A saída de tar -t geralmente é ordenada alfabeticamente, o que significa que qualquer diretório será listado antes dos arquivos neles. Isso significaria que o diretório ainda não está vazio quando rm tentar excluí-lo. Para evitar esse problema, usamos apenas sort -r para reordenar a lista em ordem alfabética invertida. Dessa forma, qualquer arquivo em um diretório será excluído antes que rm tente remover o próprio diretório.
tar -tzf archive.tar.gz | sed 's@^//*@@' sort -r | xargs -d '\n' rm -d
Os diretórios que contêm arquivos que não estão no arquivo (por exemplo, se o diretório já existia e continha arquivos antes de serem descompactados) não serão removidos. Por favor, não use rm -r em vez de rm -d , porque ele também pode excluir arquivos e diretórios que não estão no arquivo.