Existe uma maneira de editar arquivos dentro de um arquivo zip sem explicitamente extraí-los primeiro?

38

Às vezes, preciso fazer alterações em um arquivo .zip ou .jar, então, geralmente, movo o arquivo para /tmp , extrai todos os arquivos com unzip , edito alguns arquivos e, em seguida, refiz o zíper do arquivo. arquivos. Isso funciona, mas pode ser entediante. Existe um utilitário ou script de shell que eu possa usar para editar um arquivo dentro de um arquivo zip sem chamar explicitamente unzip e zip (mesmo que seja apenas um wrapper em torno desses comandos)?

    
por austin 19.09.2013 / 19:58

8 respostas

15

Você sabe o nome do arquivo no arquivo antes de descompactá-lo? Você poderia fazer uma função para descompactar em /tmp , editar e atualizar o zip:

zipedit(){
    echo "Usage: zipedit archive.zip file.txt"
    unzip "$1" "$2" -d /tmp 
    vi /tmp/$2 && zip -j --update "$1"  "/tmp/$2" 
}

Como diz, o uso é:

zipedit myarchive.zip myfile.txt

Isso descompacta o arquivo nomeado do arquivo, salva-o em /tmp , edita-o em vi e depois o adiciona de volta ao arquivo, enquanto "conserta" o caminho. Adicione ao seu .bash_profile, assumindo bash ...

EDIT: Abaixo está uma versão que trabalha com subpastas dentro do arquivo ... Nota, não use uma barra antes do nome da pasta (ou seja, use myfolder/file.txt not /myfolder/file.txt ) . Se você editar um arquivo que ainda não existia no arquivo, ele será criado para você. Também não tenho certeza se ele funcionará com o caminho absoluto para o arquivo zip. Melhor ficar com parente.

zipedit(){
    echo "Usage: zipedit archive.zip folder/file.txt"
    curdir=$(pwd)
    unzip "$1" "$2" -d /tmp 
    cd /tmp
    vi "$2" && zip --update "$curdir/$1"  "$2" 
    # remove this line to just keep overwriting files in /tmp
    rm -f "$2" # or remove -f if you want to confirm
    cd "$curdir"
}

Obrigado pela pergunta. Eu provavelmente vou acabar usando este também!

Outra edição: não testada, mas eu li que vim e emacs irão editar os arquivos jar diretamente?

    
por 20.09.2013 / 00:49
50

O Vim suporta edição de arquivos de forma transparente em arquivos zip. Basta executar:

vim file.zip

e você será mostrado uma lista de arquivos dentro do arquivo zip. Escolha o que você deseja editar, altere o que deseja e saia com: x

Se vim responder com:

Cannot make changes, 'modifiable' is off

... basta executar :set modifiable ou :set ma (fonte: link )

    
por 08.05.2014 / 11:53
4

Resposta curta: NÃO.

Se for um wrapper, você está chamando esses comandos. De qualquer forma, o melhor que posso pensar é abrir o arquivo usando file-roller , se você estiver em um ambiente X, que pode funcionar com um simples clique duplo, dependendo da sua configuração. Você pode clicar duas vezes no arquivo compactado para abri-lo e depois editá-lo:

$ file-roller b3.zip 

Quando você salva seu arquivo editado, você deve obter este diálogo:

Você pode criar um script para isso também, mas isso fica complicado se você tiver arquivos compactados que contenham vários arquivos. Deixe-me saber se é isso que você precisa e posso cozinhar algo.

    
por 19.09.2013 / 20:10
0

De acordo com a página man do zip (versão online para fácil referência: link ), o% O comandozip tem um -u flag que descreve como:

Replace (update) an existing entry in the zip archive only if it has been modified more recently than the version already in the zip archive.

    
por 19.11.2015 / 22:47
0

O gerenciador de arquivos do Diretório Opus 12 permite que você navegue pelo Zip, arraste e solte o arquivo editado de outra pasta nele e sobrescreva o arquivo que deseja editar, e ele fará tudo na hora. Muito fácil

    
por 29.06.2017 / 21:01
0

Eu escrevi um plugin Vim que estende o arquivo zip.vim para navegar e editar arquivos zip aninhados.

link

    
por 15.07.2017 / 15:10
0

Você pode usar o editor de texto padrão do KDE, por exemplo:

  1. arquivo aberto no gerenciador de arquivos
  2. abra o arquivo de texto no editor de GUI do KDE
  3. salva o arquivo de texto e o sistema pedem para atualizar o arquivo - clique em sim
  4. não se esqueça da permissão para arquivo e pasta de arquivo (meu erro favorito)
por 30.01.2018 / 09:05
-1

Resposta pedante curta; não. Se você pensar em compressão, você está usando a redundância para encurtar os arquivos, então qualquer edição altera todo o arquivo dentro do arquivo, possivelmente o arquivo.

Se você está sendo menos teórico, mais prático, mais "Eu não quero ter que descompactar / zip manualmente", existem ferramentas que você pode usar. A ark no Linux é uma das que usei. Você também pode montar o arquivo com fuse-zip , embora provavelmente seja mais trabalho do que um arquivo temporário.

    
por 19.09.2013 / 20:25