excluindo pastas e arquivos vazios de pacotes tar [RESOLVIDO]

1. excluindo pastas e arquivos vazios de pacotes tar [RESOLVIDO]

César
dark777

(usa Debian)

Enviado em 17/05/2024 - 10:16h

E ae galera beleza?

tenho algums arquivos de teste que contém arquivos e diretórios vazios, o arquivo foi compactado com o algoritmo gzip:


tar -czf pacote-teste.tar.gz


A estrutura interna do pacote é esta:

$ tar tf teste.tar.gz
teste/teste1/
teste/arquivo1.txt
teste/teste1/arquivo.c
teste/teste2/
teste/

nesta estrutura o diretório "teste2" esta vazio e o "arquivo1.txt" tambem esta vazio.

Entao para excluir os arquivos que estao dentro do arquivo tar compactado utilizei o seguinte comando que nao removeu os diretórios vazios:

tar tzf pacote-teste.tar.gz | xargs -i rmdir -v {}


entao mudei o comando para:

tar tzf pacote-teste.tar.gz | xargs -i rm -vd {}

pelo man do comando a opção -d remove apenas diretórios vazios.

e para excluir arquivos vazios executei este comando:

tar tzf pacote-teste.tar.gz | xargs -i rm -vf /{}


Qual o erro? Como fazer estes comando funcionar corretamente:

wiki.anon


  


2. MELHOR RESPOSTA

aguamole
aguamole

(usa KUbuntu)

Enviado em 17/05/2024 - 16:25h

Eu dei uma lida na documentação do $ man tar e lá diz que a opção de --delete não funciona em arquivos tar que foram comprimidos(seu caso gzip), não sei se é isso mas é o que diz.
--delete
Delete from the archive. The arguments supply names of the archive members to be removed. At least one argument must be given.

This option does not operate on compressed archives. There is no short option equivalent.

Talvez seja melhor usar um compactador e compressor diferente que não necessite do tar para comprimir vários arquivos, ou talvez comprimir cada arquivo individualmente para depois adiciona-los no pacote tar.

Lendo o manual do gzip ele em varias partes aponta que é independente da necessidade do tar para compactar e comprimir arquivos, se referindo em varias partes a arquivos no plural, isso indica que ele é capas de compactar vários arquivos em 1 só pacote sem precisar do tar, veja a seguir um exemplo:
-r --recursive
Travel the directory structure recursively. If any of the file names specified on the command line are directories, gzip will descend into the di‐
rectory and compress all the files it finds there (or decompress them in the case of gunzip ).

O problema o gzip é que eu não achei a opção dele deletar arquivos que é o objetivo do seu programa.

Logo fui ler a documentação do programa $ man zip e este também aponta que não necessita do tar para comprimir e compactar varios arquivos e ele tem a opção de deletar, veja bem o manual diz:
NAME
zip - package and compress (archive) files
Isso nos insinua que ele não depende do tar para compactar varios arquivos, isso porque esta em plural a palavra files. E também é reforçado esta ideia na opção de deletar arquivos o que mostra que não é um erro de digitação, veja a seguir:
delete (-d)
Select entries in an existing archive and delete them.
Ou seja esta escrito select(selecionar) isso indica que tem que fazer seleção de varias opções a deletar.
A pergunta é, porque então você não usa o zip diretamente sem usar o tar, a minha sugestão é esta.


3. Re: excluindo pastas e arquivos vazios de pacotes tar [RESOLVIDO]

Alexa Bolada
alexabolada

(usa Debian)

Enviado em 17/05/2024 - 10:16h

Para excluir arquivos vazios de um pacote tar, você pode usar o seguinte comando:

```
tar tzf pacote-teste.tar.gz | grep -v '/$' | xargs -I{} tar --delete -f pacote-teste.tar.gz {}
```

Este comando irá listar os arquivos presentes no pacote, filtrar apenas os arquivos (excluindo os diretórios), e então remover esses arquivos do pacote. Certifique-se de testar em ambiente controlado antes de aplicar em produção.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts