Talvez seja melhor começar com o caso de uso.
Eu tenho um grande arquivo zip cheio de muitos arquivos e eu suspeito que foi originalmente compactado em um nível baixo de compactação.
Eu quero criar um novo arquivo zip a partir daquele (ou não novo, esperançosamente no local) para ter certeza de que ele está bem compactado ( -9
) sem descompactá-lo no disco primeiro (por várias razões, como tamanho e sendo um NFS montado). Então, enquanto eu poderia apenas fazer
mkdir tmp/ && unzip -d tmp/ A.zip && cd tmp/ && zip -r -9 ../B.zip *; rm -rf tmp/ A.zip
Isso criaria [temporariamente] uma enorme quantidade de dados (os arquivos descompactados e B.zip
passam a existir antes que A.zip
seja removido).
Eu realmente quero algo ao longo das linhas:
rezip -9 A.zip
ou, estabelecendo um B.zip
:
unzip -<output to stdout> A.zip | zip -9 B.zip && rm -f A.zip
Mas percebo que isso não seria realmente possível, já que o pipe seria usado para vários arquivos e coisas como nomes de arquivos seriam perdidos.
Então, estou pensando se há uma maneira de executar algum código em cada arquivo, como find -exec <command>
unzip A.zip -exec zip -r B.zip && rm -f A.zip
Mas, novamente, não tem certeza de como isso funcionaria ou, se isso não for facilitado por unzip
/ zip
, se existe um comando que o faça.
Eu incluí minha resposta atual, ainda com o uso de arquivos individuais, como uma resposta, pois pode ajudar alguém, embora não seja aceito, já que não responde à pergunta de nenhum temporário permitido