Как мне `grep `через.xz сжимать файлы?

Это не идеальное решение, но многотомные -архивы GNU tarкажутся близкими к тому, что вы ищете. Этот вариант уже упоминался в вашем вопросе, но я хотел бы добавить ссылку из руководства GNU tar, которая разъясняет, почему это возможный вариант:

Multi-volume archive is a single tar archive, stored on several media volumes of fixed size. Although in this section we will often call `volume' a tape, there is absolutely no requirement for multi-volume archives to be stored on tapes. Instead, they can use whatever media type the user finds convenient, they can even be located on files.

When creating a multi-volume archive, GNU tar continues to fill current volume until it runs out of space, then it switches to next volume (usually the operator is queried to replace the tape on this point), and continues working on the new volume. This operation continues until all requested files are dumped. If GNU tar detects end of media while dumping a file, such a file is archived in split form. Some very big files can even be split across several volumes.

Each volume is itself a valid GNU tar archive, so it can be read without any special options. Consequently any file member residing entirely on one volume can be extracted or otherwise operated upon without needing the other volume. Sure enough, to extract a split member you would need all volumes its parts reside on.

Multi-volume archives suffer from several limitations. In particular, they cannot be compressed.

При таком определении проблемы могут возникнуть только с файлами, разделенными по размеру. Файлы, полностью содержащиеся в одном томе, могут рассматриваться как независимые от других томов.

Для каждого тома можно идентифицировать разделенные файлы с помощью параметра -v.

$ tar -tf multi-test2.tar -v
M--------- 0/0          658432 1970-01-01 03:00 file1--Continued at byte 7341568--
-rw-r--r-- test/users 4000000 2019-03-06 12:12 file2

Полностью содержащиеся файлы могут быть извлечены так же, как и в случае с одним архивом. tarкажется, жалуется на то, что разделенный файл неполный, но он может без проблем извлечь полные файлы.

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

1
24.09.2019, 15:00
1 ответ

Если вы просмотрите инструменты, предоставляемые xzRPM для дистрибутивов RHEL/CentOS/Fedora, этот RPM включает в себя несколько вспомогательных скриптов-оболочек, которые вы можете задействовать, чтобы быстро справиться с этим.

Идентификация интереса

При возникновении подобных проблем я обычно начинаю с поиска пакетов RPM, предоставляющих инструменты. В данном случае xz— это CLI сжатия, так что давайте найдем его и посмотрим, что RPM предоставляет:

$ type -f xz
xz is /usr/bin/xz

$ rpm -qf /usr/bin/xz
xz-5.2.2-1.el7.x86_64

Теперь давайте посмотрим, содержит ли он что-нибудь с именем grepв нем:

$ rpm -ql xz | grep -E 'bin/.*grep'
/usr/bin/xzegrep
/usr/bin/xzfgrep
/usr/bin/xzgrep

Да. Итак, давайте попробуем использовать xzgrep, так как это то, что нам нужно с точки зрения функциональности :

.
$ xzgrep -l ocp-app-01c *
mom.log.4
vdsm.log.2.xz
vdsm.log.81.xz

ПРИМЕЧАНИЕ:Выше мы ищем вхождения ocp-app-01cи печатаем файлы, которые его содержат.

Использование

Использование идентичноgrep:

$ xzgrep --help
Usage: xzgrep [OPTION]... [-e] PATTERN [FILE]...
Look for instances of PATTERN in the input FILEs, using their
uncompressed contents if they are compressed.

OPTIONs are the same as for 'grep'.

Report bugs to <lasse.collin@tukaani.org>.
3
27.01.2020, 23:30

Теги

Похожие вопросы