Иногда мне нужно внести изменения в файл .zip или .jar, поэтому я обычно перемещаю файл в /tmp
, извлекаю все файлы с помощью unzip
, редактирую несколько файлов, а затем заново заархивирую файлы. Это работает, но это может быть утомительно. Есть ли утилита или сценарий оболочки, которые я могу использовать для редактирования файла внутри zip-файла без явного вызова unzip
и zip
(даже если это просто оболочка для этих команд)?
8 ответов
Vim поддерживает прозрачное редактирование файлов внутри zip-файлов. Просто выполните:
vim file.zip
и вам будет показан список файлов внутри zip-архива. Выберите тот, который вы хотите редактировать, измените то, что вы хотите, и выйдите с помощью:x
Если vim
отвечает:
Невозможно внести изменения, «модифицируемый» выключен
.. просто запустите :set modifiable
или :set ma
(источник: https://stackoverflow.com/questions/5745506/vim-modifiable-is-off)
Знаете ли вы имя файла в архиве перед его разархивированием? Вы можете создать функцию для распаковки в /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 напрямую?
Краткий ответ: НЕТ.
Если это обертка, вы вызываете эти команды. В любом случае, лучшее, что я могу придумать, - это открыть файл с помощью file-roller
, если вы работаете в среде X, это может работать с помощью простого двойного щелчка, в зависимости от ваших настроек. Затем вы можете дважды щелкнуть сжатый файл, чтобы открыть его, а затем отредактировать:
$ file-roller b3.zip
Когда вы сохраните отредактированный файл, вы должны получить этот диалог:
Вы также можете создать сценарий для этого, но это усложняется, если у вас есть сжатые архивы, содержащие несколько файлов. Дайте мне знать, если это то, что вам нужно, и я смогу что-нибудь приготовить.
Краткий педантичный ответ; нет. Если вы думаете о сжатии, вы используете избыточность, чтобы сократить файлы внутри, поэтому любое редактирование изменяет весь файл в архиве, возможно, в архиве.
Если вы менее теоретичны, более практичны, более «я не хочу вручную расстегивать молнию», есть инструменты, которые вы можете использовать. Арк в Linux - это то, что я использовал. Вы также можете смонтировать архив с помощью fuse-zip, хотя это, вероятно, больше, чем временный файл.
Я написал плагин Vim, который расширяет стандартный zip.vim для просмотра и редактирования вложенных zip-файлов.
Согласно man-странице для zip
(онлайн-версия для удобства: http://linux.die.net/man/1/zip), команда zip
имеет флаг -u
который она описывает как:
Замените (обновите) существующую запись в zip-архиве, только если она была изменена позднее, чем версия, уже существующая в zip-архиве.
Диспетчер файлов Directory Opus 12 позволит вам просмотреть Zip, затем перетащить отредактированный файл из другой папки в него и перезаписать файл, который вы хотите отредактировать, и он сделает все это на лету. Очень просто
Вы можете использовать стандартный текстовый редактор KDE, например:
- открыть архив в диспетчере архивов
- открыть текстовый файл в графическом редакторе KDE
- сохраните текстовый файл и система попросит вас обновить архив - нажмите да
- не забудьте про разрешение на архив и папку архива (моя любимая ошибка)