Как использовать gunzip и tar для извлечения моего файла tar.gz в конкретный каталог, который я хочу?

Когда я запускаю gunzip -dc /path_to_tar.gz_file/zip1.tar.gz | tar xf - gunzip -dc /path_to_tar.gz_file/zip1.tar.gz | tar xf - в каталоге, где находится файл tar.gz , он извлекает только штрафы.

Как мне сообщить, чтобы содержимое tar.gz файле tar.gz в определенный каталог?

Я пробовал этот gunzip -dc /path_to_tar.gz_file/zip1.tar.gz | tar xf /target_directory gunzip -dc /path_to_tar.gz_file/zip1.tar.gz | tar xf /target_directory с ошибкой tar .

Здесь также следует отметить, что я пытаюсь сделать это в сценарии bash и что я запускаю Solaris 10.

  • как сообщить tar только исключить каталог из корня, но не каталог с тем же именем глубже в дереве?
  • ошибка tar (дочерняя)
  • Как вы просматриваете файл sql.gz как обычный текстовый SQL из командной строки?
  • Убирать все PDF-файлы в каталоге, сохраняя структуру каталогов
  • Как создать tar.gz каждого файла определенного типа в одной команде?
  • Сжатие tar-файла без извлечения содержимого
  • Открыть tar-файл, который заканчивается на .b
  • diff gzipped tarball против каталога?
  • 5 Solutions collect form web for “Как использовать gunzip и tar для извлечения моего файла tar.gz в конкретный каталог, который я хочу?”

    Вы можете сделать одну команду tar для извлечения содержимого, где хотите:

     tar -zxvf path_to_file -C output_directory 

    Как поясняется в файлах tar :

    -C directory, –cd directory, –directory directory

    В режиме c и r это изменяет каталог перед добавлением следующих файлов. В режиме x меняйте каталоги после открытия архива, но перед извлечением записей из архива.


    Поскольку вы добавили, что используете Solaris , я думаю, вы могли бы попробовать:

     gunzip -dc path_to_file | tar xf - -C path_to_extract 

    Делает ли это то, что вы хотите?

     tar xzvf file.tar.gz -C /target/directory 

    В современной Linux вы можете использовать:

     tar xzf /path/to/file.tar.gz -C /target/directory/ 

    Это в значительной степени эквивалентно:

     (cd /target/directory/; gzip -cd /path/to/file.tar.gz|tar xf - ) 

    Если вы не в Linux, проверьте свои страницы руководства для поддерживаемых опций ваших инструментов.

    Я, наконец, понял это …

    Команда find может использоваться для выполнения любой команды для каждого найденного файла.

     find . -name "*.tar" -execdir tar -vxf '{}' \; -delete 

    Рекурсивно соответствуют именам файлов ( find ) в текущем каталоге ( . ), Чье имя соответствует регулярному выражению ( -name ), которое заканчивается dot tar ( *.tar" ) (двойные кавычки не позволяют bash из расширения glob * .tar – в моем из-за окружающих обстоятельств я должен был предшествовать каждой цитате обратной косой чертой). Затем для каждого сопоставимого файла выполните tar в каталоге найденного файла ( -execdir tar ) с подробностью ( -v ) и извлеките собранные файлы ( -x ) из файла tarball ( -f ), находящегося в find ( '{}' ) (одинарные кавычки запрещают интерпретацию оболочки локального имени файла), указывающую конец списка параметров, который должен быть передан в tar для каждого сопоставимого файла ( \; ) (обратная косая черта предотвращает понимание интерпретатора полутоплив), а затем скажите find чтобы удалить каждый соответствующий файл, как указано параметром, переданным для find ( -delete ).

    Ни один из других ответов здесь не упоминает все предостережения о реализации tar по умолчанию в Solaris. Одно из таких предостережений заключается в том, что оно само по себе не поддерживает сжатие. Простая экстракция может быть достигнута посредством:

     gzip -dc < /path/to/the.tar.gz | tar xvf - 

    Кроме того, если вы создали архив с помощью чего-то вроде

     tar cvf - /path/to/directory | gzip -c > the.tar.gz 

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

     tar cvf - -C /path/to/directory . | gzip -c > the.tar.gz 

    или

     (cd /path/to/directory && tar cvf - .) | gzip -c > the.tar.gz 

    В реализации Solaris ключ -C не применяется к извлечению. Предполагая, что архив был создан с использованием одного из этих двух методов или подобного, вариант этой второй формы позволит извлечь произвольное местоположение:

     gzip -dc < the.tar.gz | (cd /path/to/extraction/point && tar xvf -) 

    Если у вас установлен GNU tar ( /usr/sfw/bin/gtar ), он поддерживает сжатие напрямую, а также удаление пути. В этом случае обычные параметры, такие как

     /usr/sfw/bin/gtar xvzf the.tar.gz 

    будет достаточно.

    Interesting Posts

    Почему я получаю неожиданный конец файла в моем скрипте при использовании gzip?

    Как отлаживать задержки доставки электронной почты?

    Альтернатива Sed для поиска и замены на очень длинных линиях

    Почему в системе Unix есть несколько оболочек?

    Количество слов из файла с оболочкой Linux

    Использование специального символа "и` в команде send в сценарии ожиданий

    косвенное изменение переменной в POSIX, как сделано в bash?

    Как я могу генерировать изображения CMYK через командную строку под Linux?

    Есть ли способ вызвать сообщение, когда команда в / usr / sbin / пытается работать как нерутин?

    Статус добавления Reiser4 в ядро ​​Linux

    Как я могу запретить кому-то получать root-доступ через загрузчик?

    «Сеть недоступна» вне локальной сети

    Проверьте, активен ли встроенный звук из разных пользователей

    извлечение вложений из почты, которая приходит в мой почтовый ящик postfix

    Заменить AAA для BBB в файле

    Linux и Unix - лучшая ОС в мире.