O 7zip extrai para um arquivo temporário e depois renomeia o temporário para o destino real?

O 7zip extrai para um arquivo temporário e depois renomeia o temporário para o destino real?

Faço esta pergunta porque gostaria de poder descompactar um arquivo que também possa conter o mesmo programa que está chamando o 7zip para descompactar o arquivo. O Linux/UNIX permite que um arquivo seja excluído ou renomeado enquanto estiver em uso, mas não permite que ele seja aberto para gravação.

Responder1

A resposta é sim e não.

Com o comando extract para 7zip, não deve haver um arquivo temporário criado. Isso acontece no Windows ao usar o arrastar e soltar do Windows Explorer (retirado da documentação emhttp://www.7-zip.org/faq.html, ctl-f procure por temp).

Você está no Linux.

Para ter 100% de certeza de que isso não acontece no Linux criei e extraí um arquivo grande e executei o programa através do strace:

strace -a88 -- 7z e byob.7z 2>&1

Eu só vi os arquivos existentes no diretório de trabalho atual desvinculados antes da substituição e os únicos arquivos acessados ​​foram os arquivos no diretório de trabalho atual.

Por favor, teste você mesmo para verificar se não perdi nada.

Espero que isso ajude você.

Responder2

Sua dúvida é sobre executável (ou script) file1, chamando um mecanismo que cria um novo file1(no mesmo lugar).

Pelo que entendi sobre sistemas de arquivos no Unix, isso exige uma grande quantidade de tempo file1enquanto está aberto (para execução). A maneira como isso acontece é que o clobber faz com que o original file1seja desvinculado, mas como está aberto, ele realmente não é removido. No entanto, não ocupa mais o nome file1nesse diretório. O novo file1é criado em um local separado (usando o nome correto). Quando o mais antigo file1conclui a execução e sai, ele é excluído. Você deve ficar com o novo file1existente.

Advertência: isso é em grande parte uma adivinhação baseada em meu conhecimento parcial. Talvez alguém aqui com mais conceitos de sistemas de arquivos afirme ou corrija isso. Enquanto isso, sugiro que você tome esta resposta apenas como teórica e não baseie suas soluções nela sem verificação experimental adicional.

informação relacionada