Извлеките несколько .tar.gz файлов с единственным вызовом tar

Другой случай помимо многих, упомянутых здесь для того, чтобы иметь пользовательские скомпилированные ядра, настраивает специализированные среды сетевой загрузки, где загрузка модуля не выполнима, и необходимо раздать полностью рабочие ядра к определенным машинам для определенных задач.

37
23.05.2017, 15:39
4 ответа

Это возможно, синтаксис довольно легок:

$ cat *.tar | tar -xvf - -i

-i опция игнорирует EOF в конце архивов tar из страницы справочника:

-i, --ignore-zeros
ignore blocks of zeros in archive (normally mean EOF)
40
27.01.2020, 19:36
  • 1
    Это, казалось, работало на меня. Точная команда, которую я использовал, была: cat *.tar.bz2 | tar -ixjv.Спасибо! –  scy 01.09.2011, 12:40
  • 2
    <Для tgz> кошка *.tgz | tar-xzvf-i-C/destination/<или> для файла в *.tgz; действительно смолите-xzvf $file-C / место назначения/; сделанный –  Ferroao 06.12.2017, 15:18

Необходимо использовать цикл. Это не повредилось бы tar синтаксис командной строки, чтобы позволить нескольким -f опции, но это потребовало бы, чтобы добавляющий код обработал несколько архивов в последовательности со всеми видами граничных условий (Что происходит, если архив в середине уродлив? Архивы могут использовать различные механизмы сжатия? У Вас могут быть несколько -C опции (опция tar GNU извлечь к конкретному каталогу), также? Что относительно-K (опция tar GNU запуститься в определенном имени элемента)? …).

Одна возможность, избегающая a for цикл должен установить и активировать AVFS, файловая система FUSE, которая обеспечивает прозрачный доступ к архивам. Каждый архив /path/to/archive удваивается как каталог ~/.avfs/path/to/archive#. Если Вы хотите соответствовать архивам подстановочным знакам, существует препятствие добавления этого # к подстановочному соответствию; это может быть сделано в zsh.

mountavfs
cp -p ~/.avfs$PWD/{a,b}.tgz\#/* /destination
cp -p ~/.avfs/path/to/source/*.tgz(e\''REPLY=$REPLY\#'\')/* /destination
2
27.01.2020, 19:36

для * .tar.gz

for file in *.tar.gz; do tar -zxf "$file"; done

для * .tar.bz2

for file in *.tar.bz2; do tar -jxf "$file"; done

для * .tar.xz

for file in *.tar.xz; do tar -Jxf "$file"; done
29
27.01.2020, 19:36

find. -name "*.tar.gz" -exec tar xzf {} \;

0
27.01.2020, 19:36

Теги

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