41

Иногда мне нужно внести изменения в файл .zip или .jar, поэтому я обычно перемещаю файл в /tmp , извлекаю все файлы с помощью unzip , редактирую несколько файлов, а затем заново заархивирую файлы. Это работает, но это может быть утомительно. Есть ли утилита или сценарий оболочки, которые я могу использовать для редактирования файла внутри zip-файла без явного вызова unzip и zip (даже если это просто оболочка для этих команд)?

8 ответов8

52

Vim поддерживает прозрачное редактирование файлов внутри zip-файлов. Просто выполните:

vim file.zip

и вам будет показан список файлов внутри zip-архива. Выберите тот, который вы хотите редактировать, измените то, что вы хотите, и выйдите с помощью:x

Если vim отвечает:

Невозможно внести изменения, «модифицируемый» выключен

.. просто запустите :set modifiable или :set ma (источник: https://stackoverflow.com/questions/5745506/vim-modifiable-is-off)

19

Знаете ли вы имя файла в архиве перед его разархивированием? Вы можете создать функцию для распаковки в /tmp , редактирования и обновления zip:

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

Как говорится, использование это:

zipedit myarchive.zip myfile.txt

Это распаковывает именованный файл из архива, сохраняет его в /tmp , редактирует его в vi затем добавляет его обратно в архив, одновременно "подбрасывая" путь. Добавьте к вашему .bash_profile, предполагая, что bash ...

РЕДАКТИРОВАТЬ: Ниже приведена версия, которая работает с подпапками внутри архива ... Обратите внимание: не используйте косую черту перед именем папки (т.е. используйте myfolder/file.txt не /myfolder/file.txt). Если вы отредактируете файл, которого еще не было в архиве, он создаст его для вас. Также не уверен, будет ли он работать с абсолютным путем к zip-файлу. Лучшая палка с родственником.

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"
}

Спасибо за вопрос. Я, вероятно, в конечном итоге использовать этот тоже!

Другое редактирование: не проверено, но я читал, что vim и emacs будут редактировать файлы jar напрямую?

4

Краткий ответ: НЕТ.

Если это обертка, вы вызываете эти команды. В любом случае, лучшее, что я могу придумать, - это открыть файл с помощью file-roller , если вы работаете в среде X, это может работать с помощью простого двойного щелчка, в зависимости от ваших настроек. Затем вы можете дважды щелкнуть сжатый файл, чтобы открыть его, а затем отредактировать:

$ file-roller b3.zip 

Когда вы сохраните отредактированный файл, вы должны получить этот диалог:

Вы также можете создать сценарий для этого, но это усложняется, если у вас есть сжатые архивы, содержащие несколько файлов. Дайте мне знать, если это то, что вам нужно, и я смогу что-нибудь приготовить.

0

Краткий педантичный ответ; нет. Если вы думаете о сжатии, вы используете избыточность, чтобы сократить файлы внутри, поэтому любое редактирование изменяет весь файл в архиве, возможно, в архиве.

Если вы менее теоретичны, более практичны, более «я не хочу вручную расстегивать молнию», есть инструменты, которые вы можете использовать. Арк в Linux - это то, что я использовал. Вы также можете смонтировать архив с помощью fuse-zip, хотя это, вероятно, больше, чем временный файл.

0

Я написал плагин Vim, который расширяет стандартный zip.vim для просмотра и редактирования вложенных zip-файлов.

https://github.com/lbrayner/vim-rzip

0

Согласно man-странице для zip (онлайн-версия для удобства: http://linux.die.net/man/1/zip), команда zip имеет флаг -u который она описывает как:

Замените (обновите) существующую запись в zip-архиве, только если она была изменена позднее, чем версия, уже существующая в zip-архиве.

0

Диспетчер файлов Directory Opus 12 позволит вам просмотреть Zip, затем перетащить отредактированный файл из другой папки в него и перезаписать файл, который вы хотите отредактировать, и он сделает все это на лету. Очень просто

0

Вы можете использовать стандартный текстовый редактор KDE, например:

  1. открыть архив в диспетчере архивов
  2. открыть текстовый файл в графическом редакторе KDE
  3. сохраните текстовый файл и система попросит вас обновить архив - нажмите да
  4. не забудьте про разрешение на архив и папку архива (моя любимая ошибка)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .