Intereting Posts
Как узнать последовательность эвакуации, которую посылают мои клавиатуры на терминал? как использовать веб-браузер в качестве клиента VNC? В чем разница между gzip и compress? Как разобрать строку в bash на переменные, используя вкладку в качестве разделителя и сохранить пробелы? wine – Могу ли я заставить SWTOR использовать обратную косую черту и AltGr в keybinds? Как отформатировать 1GB USB-накопитель на FAT32 с 512-байтным сектором? Какой самый подходящий каталог для размещения файлов, разделяемых между пользователями? Супервизор не работает `grep -l .. | xargs vim` генерирует предупреждение, почему? разрешить имя сервера сервера dnsmasq с несколькими подсетями Что заставило мой Linux Mint перезагрузиться? Bash не правильно вычисляет длину подсказки Как пользователь может редактировать файл, даже когда бит записи отключен в файле Как записывать веб-камеру v4l с помощью ffmpeg? Невозможно найти подходящий формат для кодека «none» Есть ли состояние состояния безопасности?

Подмена текста внутри сжатых файлов

У меня есть несколько файлов zip, каждый из которых имеет несколько текстовых файлов внутри них. Я хочу заменить все вхождения a в эти текстовые файлы на b и оставить их заархивированными с той же структурой.

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

У меня нет выбора, кроме как написать скрипт с циклом?

Если вы хотите изменить текст в файлах в zip-файле, тогда у вас нет выбора, кроме как извлечь их, отредактировать и повторно добавить.

Если вам нужно это сделать в большей части содержимого .zip (а не по количеству файлов, а всего сжатого количества), легче извлечь все в новый каталог, отредактировать соответствующие файлы и заархивировать все. Это, например, случай, когда редактирование всех .html файлов в .epub и оставление метаданных одинаково, так как метаданные с повторной заливкой занимают минимальное время по сравнению с остальными данными.

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

Установите плавкий предохранитель (доступный через менеджер пакетов во всех хороших дистрибутивах).

 mount_point=$(TMPDIR=$PWD mktemp -d) # Iterate over the .zip files in the current directory for z in *.zip; do fuse-zip "$z" "$mount_point" # At this point, the zip contents are available through the mount point find "$mount_point" -type f -exec sed -i 's/a/b/g' {} + fusermount -u "$mount_point" done rmdir "$mount_point" 

(Примечание: я предполагаю синтаксис GNU sed в этом примере.)