Для новичков как вообще в Linux, так и в конкретной теме, к которой относится вопрос.
Модератор: Bizdelnick
UnixNoob
Сообщения: 1489
ОС: Slackware
Сообщение
UnixNoob » 09.03.2023 16:55
Приветствую. Есть .zip архив, в этом архиве находится файл
metadata.json со следующим полем:
Код: Выделить всё
{
"uuid": "dash-to-panel@jderose9.github.com",
}
Сам файл архива имеет произвольное название, а поле uuid отражает имя каталога, в который нужно извлечь содержимое архива.
Можно ли, не извлекая архив, извлечь значение поля uuid?
Чтобы можно было свести все к одной команде:
Shell
$ unzip -d "значение из поля uuid" архив.zip
"Однажды один очень мудрый человек… ничего не сказал. Времена были опасные, да и собеседники ненадёжные"
yoricI
Сообщения: 2861
ОС: gentoo fluxbox
Сообщение
yoricI » 09.03.2023 17:09
А почему прямо уж так не хотите извлечь? По-моему, никак без этого.
Kopilov
Сообщения: 955
ОС: [K]Ubuntu, Debian
Сообщение
Kopilov » 09.03.2023 17:10
Извлечь файл metadata.json придётся.
Распаковывать весь архив не нужно.
olecya
Сообщения: 904
ОС: debian, fedora (i3-wm)
Сообщение
olecya » 09.03.2023 17:12
Есть утилита zipgrep это не zgrep. У меня уже установлена в системе
Добавлено (17:16):
Как оказалось это скрипт bash на 100 строк
Bizdelnick
Модератор
Сообщения: 21327
Статус: nulla salus bello
ОС: Debian GNU/Linux
Сообщение
Bizdelnick » 09.03.2023 17:54
unzip -p архив.zip metadata.json | jq -r .uuid
Offtopic
И кто только додумался в поле "uuid" держать не UUID…
Пишите правильно:
в консоли
вк у́пе (с чем-либо)
в о бщем
воо бще в течение (часа)
новичо к
ню анс
по у молчанию приемле мо
проблем а
пробо вать
траф ик
UnixNoob
Сообщения: 1489
ОС: Slackware
Сообщение
UnixNoob » 11.03.2023 23:08
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
Модератор
Сообщения: 21327
Статус: nulla salus bello
ОС: Debian GNU/Linux
Сообщение
Bizdelnick » 11.03.2023 23:52
UnixNoob писал: ↑ 11.03.2023 23:08
Тут под 'pipe' подразумевается стандартный вывод?
Как обычно, для левой команды стандартный вывод, для правой — стандартный ввод.
UnixNoob писал: ↑ 11.03.2023 23:08
В итоге так или можно сделать короче и быстрее?
Я написал, как сделать короче, быстрее, но главное — корректнее.
Пишите правильно:
в консоли
вк у́пе (с чем-либо)
в о бщем
воо бще в течение (часа)
новичо к
ню анс
по у молчанию приемле мо
проблем а
пробо вать
траф ик