Получить значение поля из файла в архиве, не извлекая архив.

Для новичков как вообще в Linux, так и в конкретной теме, к которой относится вопрос.

Модератор: Bizdelnick

Ответить
Аватара пользователя
UnixNoob
Сообщения: 1380
ОС: Slackware

Получить значение поля из файла в архиве, не извлекая архив.

Сообщение UnixNoob »

Приветствую. Есть .zip архив, в этом архиве находится файл metadata.json со следующим полем:

Код: Выделить всё

{
"uuid": "dash-to-panel@jderose9.github.com",
}
Сам файл архива имеет произвольное название, а поле uuid отражает имя каталога, в который нужно извлечь содержимое архива.
Можно ли, не извлекая архив, извлечь значение поля uuid?
Чтобы можно было свести все к одной команде:

Shell

$ unzip -d "значение из поля uuid" архив.zip
"Однажды один очень мудрый человек… ничего не сказал. Времена были опасные, да и собеседники ненадёжные"
Спасибо сказали:
Аватара пользователя
yoricI
Сообщения: 2389
ОС: gentoo fluxbox

Re: Получить значение поля из файла в архиве, не извлекая архив.

Сообщение yoricI »

А почему прямо уж так не хотите извлечь? По-моему, никак без этого.

Код: Выделить всё

unzip file | grep uuid (или аналог js)
Спасибо сказали:
Kopilov
Сообщения: 949
ОС: [K]Ubuntu, Debian

Re: Получить значение поля из файла в архиве, не извлекая архив.

Сообщение Kopilov »

Извлечь файл metadata.json придётся.
Распаковывать весь архив не нужно.
Спасибо сказали:
Аватара пользователя
olecya
Сообщения: 901
ОС: debian, fedora (i3-wm)

Re: Получить значение поля из файла в архиве, не извлекая архив.

Сообщение olecya »

Есть утилита zipgrep это не zgrep. У меня уже установлена в системе
Добавлено (17:16):
Как оказалось это скрипт bash на 100 строк
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20795
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Получить значение поля из файла в архиве, не извлекая архив.

Сообщение Bizdelnick »

unzip -p архив.zip metadata.json | jq -r .uuid
Offtopic
И кто только додумался в поле "uuid" держать не UUID…
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
UnixNoob
Сообщения: 1380
ОС: Slackware

Re: Получить значение поля из файла в архиве, не извлекая архив.

Сообщение UnixNoob »

olecya писала:
09.03.2023 17:12
Есть утилита zipgrep это не zgrep. У меня уже установлена в системе
Для понимания, результаты

Shell

$ zipgrep uuid архив.zip
выглядят так:

Код: Выделить всё

desktopIconsIntegration.js:        this._extensionManager.getUuids().forEach(uuid =>
desktopIconsIntegration.js:            this._sendMarginsToExtension(this._extensionManager.lookup(uuid)));
desktopIconsIntegration.js:        if (usableArea?.uuid === IDENTIFIER_UUID)
desktopIconsIntegration.js:            usableArea.setMarginsForExtension(Me.uuid, this._margins);
locations.js:        const uuid = this.mount?.get_uuid() ?? this.volume.get_uuid();
locations.js:        return uuid ? 'mountable-volume:%s'.format(uuid) : super.vfunc_get_id();
metadata.json:  "uuid": "dash-to-dock@micxgx.gmail.com",
В итоге так или можно сделать короче и быстрее?

Shell

$ zipgrep '"uuid"' dash-to-dockmicxgx.gmail.com.v78.shell-extension.zip | cut -d: -f3 | sed 's/[",]//g'
Bizdelnick писал:
09.03.2023 17:54
unzip -p архив.zip metadata.json | jq -r .uuid
Тут под 'pipe' подразумевается стандартный вывод?
Bizdelnick писал:
09.03.2023 17:54
И кто только додумался в поле "uuid" держать не UUID…
Гномеры, но возможно это я придумал себе велосипед или нашел не правильную инструкцию, но мне стала интересна сама задача, без привязки к тому, что я делаю.
"Однажды один очень мудрый человек… ничего не сказал. Времена были опасные, да и собеседники ненадёжные"
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20795
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Получить значение поля из файла в архиве, не извлекая архив.

Сообщение Bizdelnick »

UnixNoob писал:
11.03.2023 23:08
Тут под 'pipe' подразумевается стандартный вывод?
Как обычно, для левой команды стандартный вывод, для правой — стандартный ввод.
UnixNoob писал:
11.03.2023 23:08
В итоге так или можно сделать короче и быстрее?
Я написал, как сделать короче, быстрее, но главное — корректнее.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Ответить