Выполнение операции написаны в файлы tar без распаковки

Выполнение операции написаны в файлы tar без распаковки

09.03.2010 09:46:16 Просмотров 27 Источник

У меня есть список файлов, которые содержат определенные шаблоны, но эти файлы были просмолены. Теперь я хочу найти шаблон в файле tar и узнать, какие файлы содержат шаблон, не извлекая файлы.

Любая идея...?

У вопроса есть решение - Посмотреть?

Ответы - Выполнение операции написаны в файлы tar без распаковки / Performing grep operation in tar files without extracting

Ignacio Vazquez-Abrams

09.03.2010 09:50:34

tarfileпозволит вам проверить содержимое tar-файла, не извлекая его на диск.

Matthew Flaschen

09.03.2010 09:51:39

Самый простой способ, вероятно, использовать avfs . Я уже использовал его раньше для таких задач.

В принципе, синтаксис таков::

avfsd ~/.avfs # Sets up a avfs virtual filesystem
rgrep pattern ~/.avfs/path/to/file.tar#/

/path/to/file.tar-это путь к фактическому файлу tar.

Пре-ожидание ~/.avfs/(точка монтирования) и добавление # позволяет avfs предоставлять файл tar в виде каталога.

Является ответом!
ghostdog74

09.03.2010 10:14:48

команда tarимеет переключатель a-Oдля извлечения файлов в стандартный вывод. Таким образом, вы можете передать эти выходные данные grep/awk

tar xvf  test.tar -O | awk '/pattern/{print}'

tar xvf  test.tar -O | grep "pattern"

например, чтобы вернуть имя файла один шаблон найден

tar tf myarchive.tar | while read -r FILE
do
    if tar xf test.tar $FILE  -O | grep "pattern" ;then
        echo "found pattern in : $FILE"
    fi
done
https://stackoverflow.com/questions/2407111/performing-grep-operation-in-tar-files-without-extracting/2407231#comment2387543_2407231
К сожалению, это не даст имена соответствующих файлов.
https://stackoverflow.com/questions/2407111/performing-grep-operation-in-tar-files-without-extracting/2407231#comment17706509_2407231
Поэтому, давая имя одного из смоляных файлов tar после архивного файла, вы получаете только содержимое этого файла! Где это задокументировано? Не могли бы вы рассказать?
Robert Muil

11.09.2013 03:27:16

Команда zgrepдолжна делать именно то, что вы хотите, напрямую.

например

zgrep "mypattern" *.gz

http://linux.about.com/library/cmd/blcmdl1_zgrep.htm

https://stackoverflow.com/questions/2407111/performing-grep-operation-in-tar-files-without-extracting/18739883#comment45988312_18739883
этот вопрос касается файлов tar, а не gzipped.
https://stackoverflow.com/questions/2407111/performing-grep-operation-in-tar-files-without-extracting/18739883#comment55136774_18739883
zgrep -a pattern myfile.tar.gz
Chipaca

28.04.2014 02:17:24

GNU tarимеет --to-command. С его помощью вы можете иметь tarpipe каждый файл из архива в заданную команду. Для случая, когда вы просто хотите, чтобы строки совпадали, эта команда может быть простой grep. Чтобы узнать имена файлов, вам нужно воспользоваться преимуществами tar, устанавливая определенные переменные в среде команды; например,

tar xaf thing.tar.xz --to-command="awk -e '/thing.to.match/ {print ENVIRON[\"TAR_FILENAME\"] \":\", \$0}'"

Поскольку я часто использую это, у меня есть это:

#!/bin/sh
set -eu

if [ $# -lt 2 ]; then
    echo "Usage: $(basename "$0") <pattern> <tarfile>"
    exit 1
fi

if [ -t 1 ]; then
    h="$(tput setf 4)"
    m="$(tput setf 5)"
    f="$(tput sgr0)"
else
    h=""
    m=""
    f=""
fi

tar xaf "$2" --to-command="awk -e '/$1/{gsub(\"$1\", \"$m&$f\"); print \"$h\" ENVIRON[\"TAR_FILENAME\"] \"$f:\", \$0}'"
https://stackoverflow.com/questions/2407111/performing-grep-operation-in-tar-files-without-extracting/23329727#comment45988583_23329727
мои программисты не займет -e, но в противном случае идеально.
https://stackoverflow.com/questions/2407111/performing-grep-operation-in-tar-files-without-extracting/23329727#comment73094794_23329727
Команда grep; нет необходимости использовать --label="$TAR_FILENAME".
Dr. Alex RE

05.02.2020 05:02:21

Это на самом деле очень просто с ugrep option-z:

-z, --decompress
        Decompress files to search, when compressed.  Archives (.cpio,
        .pax, .tar, and .zip) and compressed archives (e.g. .taz, .tgz,
        .tpz, .tbz, .tbz2, .tb2, .tz2, .tlz, and .txz) are searched and
        matching pathnames of files in archives are output in braces.  If
        -g, -O, -M, or -t is specified, searches files within archives
        whose name matches globs, matches file name extensions, matches
        file signature magic bytes, or matches file types, respectively.
        Supported compression formats: gzip (.gz), compress (.Z), zip,
        bzip2 (requires suffix .bz, .bz2, .bzip2, .tbz, .tbz2, .tb2, .tz2),
        lzma and xz (requires suffix .lzma, .tlz, .xz, .txz).

Например:

ugrep -z PATTERN archive.tgz

При этом каждый из архивированных файлов подвергается обработке для отображения PATTERN(ugrep имеет те же параметры и производит тот же результат). Например:

grep

Если вам нужны только имена файлов, используйте опцию$ ugrep -z "Hello" archive.tgz {Hello.bat}:echo "Hello World!" Binary file archive.tgz{Hello.class} matches {Hello.java}:public class Hello // prints a Hello World! greeting {Hello.java}: { System.out.println("Hello World!"); {Hello.pdf}:(Hello) {Hello.sh}:echo "Hello World!" {Hello.txt}:Hello (-l) и настройте вывод имени файла с помощью опции --files-with-matches, чтобы избавиться от фигурных скобок:

--format="%z%~"

Тарболы ( $ ugrep -z Hello -l --format="%z%~" archive.tgz Hello.bat Hello.class Hello.java Hello.pdf Hello.sh Hello.txt /.tar.gz, .tgz/.tar.bz2, .tbz/.tar.xz, .txz/ .tar.lzma) ищутся так же, как .tlzархивы.

Закрыть X