Unix zip dizini, ancak belirli alt dizinleri hariç tuttu (ve içindeki her şey)


115

Bir dizini sıkıştırmaya çalışıyorum (Unix'te SSH üzerinden) ancak birkaç alt dizini (ve içindeki tüm dosyaları ve dizinleri) dışlamam gerekiyor.

Şimdiye kadar bu var:

zip -r myarchive.zip dir1 -x dir1/ignoreDir/**/* 

Yine de işe yaramadı.

Ben de denedim

zip -r myarchive.zip dir1 -x dir1/ignoreDir1/* dir1/ignoreDir2/*

Ancak yine de ignoreDir1 ve ignoreDir2 içindeki alt dizinleri içerecektir.

Dışlamak istediğim dizinlerdeki alt dizin yapısı oldukça önemlidir, bu nedenle her dizini -x argümanına ekleyemiyorum.

Bunu nasıl yapacağını bilen var mı?


@AlexanderMills - Bu soruya bakın.
jww

Yanıtlar:


130

Çok yakındım!

İhtiyacım olan gerçek komut:

zip -r myarchive.zip dir1 -x dir1/ignoreDir1/**\* dir1/ignoreDir2/**\*

Serin ve takip ettiğiniz için teşekkürler! Bu arada kendi cevabını kabul edebilirsin.
Daniel H,

2
Bu benim için osx'ta işe yaramadı. @ Pathfilder cevap olsa yaptı.
44’de rynop

11
Bunun yerine: -x dir1 / ignoreDir1 / ** \ *, bunu yapabilirsiniz: -x dir1 / ignoreDir1 / \ *
Richard Gomes

67

Bir dizini dışlamak için özel sistemim için dışlanan dizinlerimin çevresine tırnak işaretleri koymak zorunda kaldım ve bir çekicilik gibi çalıştı:

zip -r myarchive.zip dir1 -x "dir1/ignoreDir1/*" "dir1/ignoreDir2/*"

Notlar:

- bu hem hariç tutulacak dizini hem de içindeki tüm dosyaları dışladı.

- Dışlamak istediğiniz dizinlerin tam yolunu kullanmalısınız!


5
Mac OS'de çalışan budur. :-)
physicalattraction

9
Yollardan alıntı yapılmasını isteme veya yıldız işaretinden kaçmanın nedenini kimse açıklamadığı için, sebep şudur: Eğer yol belirtilmezse veya joker karakter kaçarsa, kabuk onları geçmeden önce joker karakter genişletmesi gerçekleştirir zipve belirtilen dizinlerdeki girişlere giden yollar, ancak bunların alt dizinlerindeki dosyalara giden yollar zipbulunmadığından, verilen dizinler altındaki her şeyi göz ardı etmemeye neden olur .
zagrimsan

Aslında bunun işe yaramasının sebeplerinden biri olduğunu düşünüyorum çünkü Mac OS'ta dizinlerimde boşluklar vardı ve bu
yol göstericisine

@Zagrimsandakileri temizlediğiniz için teşekkür ederiz. Her iki sorun sabit O ve bunun nedenini açıkladı yüzden (aynı zamanda başka şeyler için gelecekte kullanışlı olacaktır ki) bunu anlamak söyledi. 👍
Synetech

8

@sulman kullanarak:

     zip -r myarchive.zip dir1 -x dir1 / ignoreDir1 / ** \ * dir1 / ignoreDir2 / ** \ *

zip arşivinde dir1 / ignoreDir1 / empty klasörü bulunacaktır, bunlar:

     zip -r myarchive.zip dir1 -x dir1 / ignoreDir1 ** dir1 / ignoreDir2 **

hile yapacaksanız, alt klasörlerde yalnızca dir1 yerine arama yapmak için bir öncü ** kullanabilirsiniz


Ah tamam! Buna ışık tuttuğun için teşekkürler!
sulman

7

Aşağıdaki yapacak

zip -r myarchive.zip dir1 -x dir1 / ignoreDir1 \ * dir1 / ignoreDir2 \ *

Neye ihtiyacın vardı **, Sulman?

Benim için bir cazibe gibi çalışır:

[root@ip-00-000-000-000 dir1]# ls -lrt dir1/ 
total 16
drwxr-xr-x 2 root root 4096 Oct 31 07:38 ignoredir1
drwxr-xr-x 2 root root 4096 Oct 31 07:38 ignoredir2
drwxr-xr-x 2 root root 4096 Oct 31 07:39 dir3
-rw-r--r-- 1 root root    8 Oct 31 07:39 test.txt

[root@ip-00-000-000-000 temp]# zip -r dir1.zip dir1 -x dir1/ignoredir1\* dir1/ignoredir2\*
  adding: dir1/ (stored 0%)
  adding: dir1/dir3/ (stored 0%)
  adding: dir1/dir3/test3.txt (deflated 13%)
  adding: dir1/test.txt (stored 0%)

** neden gerekli olduğunu bilmiyorum. Belki başka birileri bu konuda biraz ışık tutabilir?
sulman

Üzgünüm, @sulman, yanlış yazdım. Demek istediğim en son düzenlememe göre. Benim için bir cazibe gibi çalışır :)
ericn

1

Tıpkı diğer cevaplar gibi, ancak tüm dizin içeriğini hariç tutmak yerine, dizinleri tamamen hariç tutmak:

zip -r myarchive.zip dir1 -x dir1/ignoreDir1/\* dir1/ignoreDir2/\*

0

Bunu David R. Heffelfinger'dan çalışmak için buldum :

zip -r myarchive.zip dir1 -x dir1/ignoreDir1\* dir1\ignorDir2\*

Dizini ve içeriğini dışladı.


Şüphesiz arasında ters eğik çizgi dir1ve ignorDir2öne eğik çizgi olması amaçlanmıştır. Diğer ters eğik çizgilerin ters eğik çizgi olması mı demek istiyorsun? Eğer öyleyse, o zaman iki yıl önce bulanık cevabın cevabını kopyaladın.
G-Man

-1

Benim için çalıştı: zip -9 -r ~ / folded.zip çevrimiçi -x klasörü / folder2 / folder3 / foldern / \ * .

Yıldız işareti kaçmış gibi görünüyor.


2
Bunun bir yıl önceki Rick Ehrahrt veya Eric'in (birkaç yıl önce) çözümünden ne kadar farklıdır? Lütfen yeni bir tane göndermeden önce verilen çözümleri okuyunuz ...
zagrimsan

Çünkü yıldızdan önce bir ters eğik çizgi ekledim (yıldızdan kaçmak için). Bunu yapmazsam benim işimde linux sürümünde çalışmıyor.
Francisco M

Ayrıca Rick Ehrahrt (2014) ve eric (2012) aynı çözümü yayınladı (yıldızdan kaçmak için). Çözümde yanlış olan bir şey yok, ancak aynı şeyi birden çok kez göndermek, çözümün neden işe yaradığını açıklayarak çözüme önemli bir derinlik katamadığı sürece bir anlam ifade etmiyor. Bunun gibi basit bir durumda, daha fazla açıklanacak bir şey yok. Lütfen bunu kişisel olarak almayın, buradaki tek amacım SU'yu temiz ve özlü tutmaya yardımcı olmak, böylece kullanıcılar en az çabayla en iyi çözümü bulabilmek.
zagrimsan
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.