Как использовать 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.

  • Как установить загруженное программное обеспечение с помощью менеджеров пакетов? (Ubuntu Linux)
  • tar: Удаление имени `/ 'из имен участников
  • Сжатие папки, но не сжимать определенные типы файлов, а включать их в файл gz
  • Как ускорить работу с разреженными файлами с помощью tar, gzip, rsync?
  • Как подключить передачу файла scp / ssh (pull) через tar (удаленный -> локальный перенос, инициированный с локальной машины)
  • В чем разница между tar полной файловой системы и изображением?
  • Как сравнить два архива tar (включая содержимое файла, новые / удаленные файлы, символические ссылки)?
  • Как собирать случайные фрагменты файла tar?
  • 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 

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

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