2013-10-29 18 views
6

Merhaba Dizine sahip olabilecek bir dosyayı açmam gerekiyor ve bu dizinin içindeki her şeyi hariç tutmak istiyorum. Çok fazla seçeneğim denedim ve buraya da baktım ama görünmüyor iyi bir çözüm bulmak için.linux unzip klasördeki ve altındaki her şeyi hariç tutuyor

Bunlar zip dosyasının içeriğini şunlardır: klasör bilinmemektedir EXCLUDE derinliğini unutmayın, ama biz sadece içindeki dosyaları ayıklamak bu komutu, denenmiş her şeyi

$unzip -l patch2.zip 
Archive: patch2.zip 
    Length  Date Time Name 
--------- ---------- ----- ---- 
     0 2013-10-29 17:42 EXCLUDE/ 
     0 2013-10-29 17:24 EXCLUDE/inner/ 
     0 2013-10-29 17:24 EXCLUDE/inner/inner1.txt 
     0 2013-10-29 15:45 EXCLUDE/file.txt 
     0 2013-10-29 15:44 patch.jar 
     0 2013-10-29 15:44 system.properties 
---------      ------- 
     0      6 files 

dışlamak zorunda klasör ve içeriğini değil, içeriğini ve içeriğini:

$unzip -l patch2.zip -x EXCLUDE/* 
Archive: patch2.zip 
    Length  Date Time Name 
--------- ---------- ----- ---- 
     0 2013-10-29 17:42 EXCLUDE/ 
     0 2013-10-29 17:24 EXCLUDE/inner/ 
     0 2013-10-29 17:24 EXCLUDE/inner/inner1.txt 
     0 2013-10-29 15:44 patch.jar 
     0 2013-10-29 15:44 system.properties 
---------      ------- 
     0      5 files 

Yardımlarınız için teşekkür ederiz.

cevap

8

Hariç tutma şeklini unzip geçirilecek şekilde belirtmeniz gerekir. Aksi takdirde, kabuk unzip'a geçirilmeden önce genişletilecektir.

Dene:

unzip patch2.zip -x "EXCLUDE/*" 
+0

+1. Benim sadece bir "iyi bilmek" alternatif ^^ (şimdi az bilinen, erken linux günlerde oldukça ünlü iken) –

+0

Bu mükemmel çalıştı teşekkürler. "Unzipte geçilir. Aksi takdirde unzipten geçirilmeden önce kabuk tarafından genişletilir" diyerek açıklar mısınız lütfen. – Ravi

+1

@Ravi Kabuğun joker desenlerini dosya isimlerine dönüştürdüğü [Globbing] (http://tldp.org/LDP/abs/html/globbingref.html) hakkında bilgi edinin. ör., echo * 'çalıştırdığınızda, kabuk, dosya adlarının listesine" * "' 'genişler '. 'echo' yürütmeden önce' dosya1', 'dosya2' vb. Sonuç olarak, echo * 'echo file1 file2' olur. 'Eko' programı hiçbir zaman joker karakteri görmez, sadece 'dosya1' ve 'dosya2' argümanlarını görür. Ancak, eğer desenden alıntı yaparsanız, “echo” * “', kabuk bu genişlemeyi gerçekleştirmeyecek ve kalıp, programın seçtiği ancak yorumlayabileceği bir argüman olarak geçecektir. – dogbane

0

@dogbane cevap doğru.

Ama hala eklemek başka interresting seçeneği sayesinde, linux üzerinde olduğu gibi [umarım]: o: (Midnight Commander aka)

bunu başlayın

ve:

mc 

Sağ panelde, Dosyalarınızın sonlanmasını istediğiniz yere gidin ve Sol panelde ZIP dosyasını "içeride" gezdirin ve bu ilk seviyede ihtiyacınız olan şeyleri + kopyalayın (yani tümünü seçin ve EXCLUDE klasörünün seçimini kaldırın.) örnek)

mc ÇOK esnek ve güzel özellikle tar/untar/zip/move/delete/rename dosyaları ... kullanmak için (windows'ta, bir eşdeğer TotalCommander, ve yedeklemeyi ve menşeini senkronize tutmak için "senkronize et" seçeneğini çok sık kullanıyorum). Arşivleri, sıkıştırılmamış gibi gezmenize izin verir (gerçek açma işlemini yalnızca "gezinme" kısmına indirgemeye çalışın, böylece iki kez sıkıştırmazsınız). OP'nin sorusuna yakın olduğu için cevap için