Извлеките только определенный файл от заархивированного архива до данного каталога

Основное соединение

Является самым легким, если Вы планируете заранее.

Откройте основное соединение в первый раз. Для последующих соединений направьте ведомые соединения посредством существующего основного соединения. В Вашем ~/.ssh/config, настройте совместное использование соединения для случая автоматически:

ControlMaster auto
ControlPath ~/.ssh/control:%h:%p:%r

При запуске ssh сессии к тому же (пользователь, порт, машина) как существующее соединение, вторая сессия будет туннелирована по первому. Установление второго соединения не требует никакой новой аутентификации и очень быстро.

Таким образом, в то время как у Вас есть свое активное соединение, Вы можете быстро:

Передача

На существующем соединении можно установить реверс ssh туннель. На ssh командной строке создайте удаленную передачу путем передачи -R 22042:localhost:22 где 22042 случайным образом выбранное число, это отличается от любого другого номера порта на удаленной машине. Затем ssh -p 22042 localhost на удаленной машине подключает Вас назад к исходной машине; можно использовать scp -P 22042 foo localhost: скопировать файлы.

Можно автоматизировать это далее с RemoteForward 22042 localhost:22. Проблема с этим состоит в том, что, если Вы соединяетесь с тем же компьютером с несколькими экземплярами ssh, или если кто-то еще использует порт, Вы не получаете передачу.

Если Вы не включили удаленную передачу из запуска, можно сделать это на существующей ssh сессии. Тип Входит ~C Войти -R 22042:localhost:22 Войти. См. “Символы ESC” в руководстве для получения дополнительной информации.

В этом потоке Отказа сервера существует также некоторая интересная информация.

Вставка копии

Если файл является маленьким, можно вывести его и вставка копии от терминального вывода. Если файл содержит непечатаемые символы, используйте кодирование, такое как base64.

remote.example.net$ base64 (copy the output)
local.example.net$ base64 -d >myfile
(paste the clipboard contents)
Ctrl+D

Более удобно, если Вы имеете X активных передач, копируете файл на удаленной машине и вставляете его локально. Можно передать данные по каналу в и из xclip или xsel. Если Вы хотите сохранить имя файла и метаданные, вставка копии архив.

remote.example.net$ tar -czf - myfile | xsel

local.example.net$ xsel | tar -xzf -
160
23.01.2017, 17:44
5 ответов

Можно извлечь просто текст к стандартному выводу с -p опция:

unzip -p myarchive.zip path/to/zipped/file.txt >file.txt

Это не извлечет метаданные (дата, полномочия, …), только содержание файла. Это - цена для оплаты за удобство не необходимости переместить файл впоследствии.

С другой стороны, смонтируйте архив как каталог и просто скопируйте файл. С AVFS:

mountavfs
cp -p ~/.avfs"$PWD/myarchive.zip#"/path/to/zipped/file.txt .

Или с zip предохранителя:

mkdir myarchive.d
fuse-zip myarchive.zip myarchive.d
cp -p myarchive.d/path/to/zipped/file.txt .
fusermount -u myarchive.d; rmdir myarchive.d
139
27.01.2020, 19:27
  • 1
    @TK Kocheran: Почему Вы просто не тестируете его? Я протестировал первую команду, и она работала. –  user unknown 01.06.2011, 06:09
  • 2
    @TKKocheran: файлы Банки являются zip, таким образом, разархивировать и методы zip предохранителя будут, очевидно, работать. Метод AVFS также работает, потому что AVFS предполагает формат на основе имен файлов и знает о .jar; если Ваш файл называют по-другому, Вы, возможно, должны были бы сказать AVFS использовать свой обработчик zip, например. ~/.avfs$PWD/foo.apk#uzip/META-INF. –  Gilles 'SO- stop being evil' 01.06.2011, 10:19
  • 3
    на самом деле, я означал извлекать JAR/двоичный файл из архива ZIP. У меня не было шанса проверить его уже, можно ли видеть, что какие-либо проблемы используют первую команду выше для извлечения двоичных файлов? –  Naftuli Kay 01.06.2011, 21:41
  • 4
    @TKKocheran: нет никакой проблемы, -p извлекает файл как есть (-c действительно пишет преобразование). –  Gilles 'SO- stop being evil' 01.06.2011, 23:50
  • 5
    я думаю ответ @Myles, более изящен, потому что он не требует перенаправления вывода, и он сохраняет атрибуты файла. –  gertvdijk 04.12.2012, 17:42
unzip -j "myarchive.zip" "in/archive/file.txt" -d "/path/to/unzip/to"

Введите полный путь для заархивированного файла, не только имя файла. Обязательно сохраните структуру, как замечено из zip-файла.

Это извлечет единственный файл file.txt в myarchive.zip кому: /path/to/unzip/to/file.txt.

164
27.01.2020, 19:27
  • 1
    Это - лучший ответ. –  redburn 24.02.2014, 16:33
  • 2
    Это не обрабатывает случай, где Вы хотите, чтобы сгенерированное имя файла отличалось. –  Oleg Vaskevich 27.10.2014, 23:21
  • 3
    "-j" параметр: пути спама. Структура каталогов архива не воссоздается; все файлы депонированы в каталоге извлечения (по умолчанию, текущий). "-d" параметр: файлы извлечения в exdir –  e1i45 29.01.2015, 18:14
  • 4
    @OlegVaskevich, вопрос не запрашивает целевого имени файла отличаться –  Tapemaster 11.05.2015, 13:49
  • 5
    Да, я знаю. Все еще проголосовавший. :) –  Oleg Vaskevich 11.05.2015, 14:59

Более простая версия:

unzip ARCHIVE_NAME PATH_OF_FILE_INSIDE_ARCHIVE

Это воссоздаст PATH_OF_FILE_INSIDE_ARCHIVE в текущем каталоге, но только извлекает указанный файл.

Перечислять все файлы в архиве Zip:

unzip -l ARCHIVE_NAME
25
27.01.2020, 19:27

В macOS, которая по умолчанию использует Info-Zip

Сначала перечислите файлы, чтобы найти то, что вам нужно

unzip -l my.zip

Затем предоставьте список файлов для извлечения из архива

unzip my.zip annoying/path/to/file

Объединить с -p для stdout

unzip -p my.zip annoying/path/to/file >./file
10
27.01.2020, 19:27

простое использование:

unzip zipfile.zip path/inside/zip/file.txt

и он раздует файл.

$ unzip -l./../html.zip | grep wp-config

     3328  07-22-2019 15:10   html/wp-config.php

     2898  01-07-2019 23:30   html/wp-config-sample.php

$ unzip./../html.zip html/wp-config.php

     Archive: ./../html.zip
     inflating: html/wp-config.php

$ ls -lrth

     total 4.0K
     drwxr-sr-x 2 apache apache 4.0K Jul 26 14:41 html

$ ls -lrth html/*

     total 4.0K
     -rw-rw-rw- 1 apache apache 3.3K Jul 22 15:10 wp-config.php
3
27.01.2020, 19:27

Теги

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