Как использовать 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 в определенный каталог?

  • ошибка tar (дочерняя)
  • изменять права собственности на файлы в архиве tar
  • Могу ли я закрепить всю папку с помощью gzip?
  • Есть ли способ конвертировать zip в tar без извлечения его в файловую систему?
  • Как лучше копировать большое количество небольших файлов по scp?
  • Разделить файл 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.gz из каталога, опуская некоторые подкаталоги и добавляя только новые или измененные файлы
  • Как восстановить поврежденный файл tar.gz
  • Как сделать Regexp / pattern-search в файлах с ружьем?
  • Может ли `tar -list -v` указать размер файла в формате для чтения?
  • Добавить / обновить файл в существующий архив tar.gz?
  • Процесс gzip регулярно работает в моей системе, как мне понять, что его запускает?
  • 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 - лучшая ОС в мире.