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

1

Faço esta pergunta porque gostaria de poder descompactar um arquivo que também pode conter o próprio 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.

    
por Gary Stampa 14.04.2012 / 23:49

2 respostas

2

A resposta é sim e não.

Com o comando de extração para o 7zip, não deve haver um arquivo temporário criado. Isso acontece no Windows, embora usando o arrastar e soltar do Windows Explorer (extraído da documentação no link , pesquisa ctl-f para temp).

Você está no Linux embora.

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

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

Eu só vi os arquivos existentes no diretório de trabalho atual desassociados antes de substituir e os únicos arquivos acessados eram arquivos no diretório de trabalho atual.

Por favor, teste você mesmo para verificar se eu não senti falta de algo.

Espero que isso ajude você.

    
por 15.04.2012 / 05:16
0

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

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

Advertência: Isso é em grande parte adivinhação baseada no meu conhecimento parcial. Talvez alguém aqui com mais conceitos de sistemas de arquivos possa afirmá-lo ou corrigi-lo. Enquanto isso, sugiro que você tome essa resposta apenas como uma teoria e não baseie suas soluções nela sem uma verificação experimental adicional.

    
por 15.04.2012 / 06:37