Sıkıştırılmış bir arşivden belirli bir dosyayı yalnızca belirli bir dizine çıkart


151

Tek bir dosyayı, yolunu bildiğim bir ZIP dosyasından çıkarmam gerekiyor. Aşağıdaki gibi bir komut var mı:

unzip -d . myarchive.zip path/to/zipped/file.txt

Ne yazık ki, yukarıdaki komut dosyadaki tüm yolu ayıklar ve yeniden oluşturur ./path/to/zipped/file.txt. Dosyayı sadece belirtilen bir dizine çekmenin bir yolu var mı?

Yanıtlar:


130

-pSeçeneği ile sadece metni standart çıktıya çıkarabilirsiniz :

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

Bu, yalnızca dosya içeriğini meta verileri (tarih, izinler,…) çıkarmaz. Daha sonra dosyayı taşımak zorunda kalmamanın rahatlığı için ödenmesi gereken bedel budur.

Alternatif olarak, arşivi bir dizin olarak bağlayın ve dosyayı kopyalayın. İle AVF'lerin :

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

Veya sigorta zip ile :

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

2
@TK Kocheran: Neden test etmiyorsunuz? İlk komutu test ettim ve işe yaradı.
kullanıcı bilinmeyen

1
@TKKocheran: Jar dosyaları fermuarlardır, bu yüzden unzip ve fuse zip yöntemleri açıktır. AVFS yöntemi de çalışır, çünkü AVFS, dosya adlarına dayalı biçimi tahmin eder ve hakkında bilgi sahibidir .jar; dosyanız farklı bir şekilde adlandırılmışsa, AVFS'ye zip işleyicisini kullanmasını söylemeniz gerekebilir, örn ~/.avfs$PWD/foo.apk#uzip/META-INF.
Gilles,

1
Aslında, ZIP arşivinden bir JAR / binary dosyasını çıkartmak istedim Henüz deneme şansım olmadı, ikili dosyaları ayıklamak için yukarıdaki ilk komutu kullanarak herhangi bir sorun görebilir misiniz?
Naftuli Kay

2
@TKKocheran: Sorun yok -p, dosyayı olduğu gibi ayıklar ( -cmetin dönüşümü yapar).
Gilles,

2
@Myles'ın cevabının daha şık olduğunu düşünüyorum çünkü çıktı yönlendirmesini gerektirmiyor ve dosya özelliklerini koruyor.
gertvdijk

152
unzip -j "myarchive.zip" "in/archive/file.txt" -d "/path/to/unzip/to"

Yalnızca dosya adı için değil, sıkıştırılmış dosya için tam yolu girin. Yapıyı zip dosyasından görüldüğü gibi tuttuğunuzdan emin olun.

Bu, tek bir dosyayı file.txtiçine myarchive.zipçıkartır /path/to/unzip/to/file.txt.


18
Bu daha iyi cevap.
Redburn,

1
Oluşturulan dosya adının farklı olmasını istediğiniz durumu ele almaz.
Oleg Vaskevich

6
"-j" parametresi: önemsiz yollar. Arşivin dizin yapısı yeniden oluşturulmadı; tüm dosyalar çıkarma dizinine yerleştirilir (varsayılan olarak geçerli dosyadır). "-d" parametresi: exdir'e dosya çıkartma
e1i45

1
@OlegVaskevich, soru hedef dosya
adının

Evet biliyorum. Yine de oy kullandı. :)
Oleg Vaskevich

25

Basit sürüm:

unzip ARCHIVE_NAME PATH_OF_FILE_INSIDE_ARCHIVE

Bu, PATH_OF_FILE_INSIDE_ARCHIVEgeçerli dizinde yeniden oluşturulur , ancak yalnızca belirtilen dosyayı ayıklar.

Zip arşivindeki tüm dosyaları listelemek için:

unzip -l ARCHIVE_NAME

2
Kabul edilen cevaptan çok daha basit.
FractalSpace

Nitekim, iyi çalıştı ve bu waaaay daha basit
Mahmoud Ali

2

MacOS üzerinde varsayılan olarak hangi kullanır Info-Zip

İstediğinizi bulmak için ilk önce dosyaları listeler.

unzip -l my.zip

Ardından, arşivden çıkartılacak dosyaların bir listesini sağlayın

unzip my.zip annoying/path/to/file

Stdout için -p ile birleştir

unzip -p my.zip annoying/path/to/file >./file

1
İnsanların neden bariz bir sebep olmadan neden oy kullandığını anlamıyorum. Bu doğru bir cevaptır (sadece macOS için değil)
FractalSpace

@FractalSpace Açıkça değil, OP'nin istediğinin tam tersini yapar.
Konrad Rudolph

Anahtar bireysel bir dosya alıyor. Stdout çıktısı ve -p bayrağını kullanan yönlendirme önemsizdir, ancak açıkça ekledim
Cameron Lowell Palmer

2

basit kullanım:

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

ve dosyayı şişirecek.

$ 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

-d outpathDosyanın nereye yerleştirileceğini belirtmek için argüman da ekleyebilir .
Efren

Ve -jsıkıştırılmış yollardan kaçınma argümanı
Efren
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.