Gizli dosyalar olmadan terminal üzerinden tüm bir dizinin zip arşivini nasıl oluşturabilirim?

İçinde çok sayıda gizli klasör / dosya bulunan bir projem var. Bunun bir zip arşivi oluşturmak istiyorum, ancak arşivde herhangi bir gizli klasör / dosya olmamalıdır. Gizli klasördeki dosyalar gizli değilse, bunlar da dahil edilmemelidir.

Böyle bir dizinin zip arşivini oluşturabileceğimi biliyorum.:

zip -r zipfile.zip directory

Dosyaları -x seçeneğiyle hariç tutabileceğimi de biliyorum, bu yüzden bunun işe yarayabileceğini düşündüm:

zip -r zipfile.zip directory -x .*

İşe yaramadı. Tüm gizli dizinler hala zip dosyasındaydı.

Her şeyden önce, zip'i yüklemediyseniz, önce aşağıdaki gibi yükleyin:

sudo apt-get install zip

Sonra sadece bir zip dosyası oluşturmak için:

zip -r compressed_filename.zip foldername

Gizli dosyaları hariç tutmak istiyorsanız:

find /folder_path -path '*/.*' -prune -o -type f -print | zip ~/compressed_filename.zip -@

Zıp Arşivindeki Dosyaları Hariç Tutma(alınan http://osxdaily.com/2013/04/30/how-to-exclude-files-from-a-zip-archive/)

Bir zip arşivi oluştururken dosya hariç tutmanın temelleri -x belirli bir ad veya desenle eşleşen dosyaları arşivden çıkarmak için kullanılan bayrak. En basit haliyle, şöyle görünecek:

zip archive.zip files -x "ExcludeMe"

Tek bir dosyayı hariç tutabileceğiniz anlamına gelir, “Nothanks" olarak adlandırıldığını söyleyin.jpg”

zip archive.zip images/ -x "Nothanks.jpg"

Bunun yararlı olduğu birkaç özel örneği ele alalım.

Hariç tutmak.Zip Arşivlerinden DS_Store Dosyaları

Bu, genellikle görünmez Mac meta verilerini önleyecektir .DS_Store varsayılan olarak paketlenmiş bir zip arşivine dahil edilen dosyalar:

zip -r archivename.zip archivedirectory -x "*.DS_Store"

Ancak dizin alt dizinler içeriyorsa, ds_store dosyalarını da alt dizinlerden hariç tutmak için bu komutun başka bir varyasyonunu kullanmak isteyeceksiniz:

zip -r archive.zip directory -x "*/\.DS_Store"

Not: Tüm kabuklar bu komutun düzgün çalışması için tırnak işaretleri gerektirmez, ancak bash kabuğunda (OS X için varsayılan) joker karakterler ve desenlerle hariç tutmak için tırnak işaretleri kullanmanız gerekir.

Belirli Dosya Türlerini Zıp Arşivinden Hariç Tutma

Joker karakterlerle, uzantıya odaklanarak belirli bir türdeki tüm dosyaları da hariç tutabilirsiniz. Örneğin, bu komut bir dizinin tamamını, eksi herhangi birini zıplayacaktır. .jpg dosyalar:

zip -r archive.zip directory -x "*.jpg"

Bu, bir dosya adında eşleşen herhangi bir dosya uzantısı veya desen için değiştirilebilir.

'Yi hariç tut.git ya da .zıp Arşivinden svn Dizini

Bir dizini Zip, eksi .git ve bu içerik:

zip -r zipdir.zip directorytozip -x "*.git*"

Bir klasörü dahil etmeden Zip .svn dizin:

zip -r zipped.zip directory -x "*.svn*"

Tüm Gizli Dosyaları Zıp Arşivinden Hariç Tut

Kalıplar ve joker karakterler kullanılabildiğinden, bir dizin gibi bir nokta ile öneklenerek yapılan görünmez dosya ve klasörlerin tümünü veya tümünü de hariç tutabilirsiniz .svn veya tek bir dosya gibi .bash_profile veya .htaccess.

zip -r archivename.zip directorytozip -x "*.*"

Veya tüm görünmez dosyaları tüm alt dizinlerden hariç tutmak için:

zip -r archive.zip directory -x "*/\.*"

Bu, gizlenmeyen dizinlerdeki gizli dosyaları da hariç tutar:

find /full_path -path '*/.*' -prune -o -type f -print | zip ~/file.zip -@

Eklemek " to the .* (aksi takdirde, kabuğunuz genişler .* geçerli dizindeki nokta dosyalarına) ve ayrıca alt dizinlerdeki gizli dosyaları hariç tut:

zip -r zipfile.zip . -x ".*" -x "*/.*"

Bu, a ile başlayan dosyalarla sonuçlanacaktır. . zip dosyanıza eklenmemesi için.

rinzwind@discworld:~/tmp$ ls -ladrwxr-xr-x  2 rinzwind rinzwind 4096 2011-08-28 00:15 tmpdrwxr-xr-x  2 rinzwind rinzwind 4096 2011-08-28 00:15 .tmprinzwind@discworld:~/tmp$ zip -r zipfile.zip . -x .*adding: .tmp/ (stored 0%)adding: tmp/ (stored 0%)rinzwind@discworld:~/tmp$ zip -r zipfile.zip . -x ".*" -x "*/.*"updating: tmp/ (stored 0%)

İle başlayan tüm klasörleri hariç tutmak için örnek. :

tar cvpzf folder.tgz folder/ --exclude '.*'

Daha iyi sıkıştır ama daha yavaş :

tar cvpjf folder.tar.bz2 folder/ --exclude '.*'

Bu her şeyi içerir "." dizinler, alt dizinler ve "." dizin içindeki dosyalar veya dizinler...Esasen ilk cevap, ancak en üst seviyeyi içeriyor "." eğe.

find /full_path -path '*.*/.*' -prune -o -type f -print | zip ~/file.zip -@

Doğru yöntem şöyle olurdu:

zip -r zipfile.zip directory -x directory/.*

Bazı dosya uzantıları hariç dir'leri sıkıştırırken:

$ cd /path/to/dir$ zip -r dir.zip . -x "*.log" -x "*.cache"

Dizinde gizli klasörler ve dosyalar olmadan:

zip -r zipfile.zip directory/*

dizin:

|── .git│   ├── src│   └── Work.file├── .test│   └── .file└── test.file
$ zip -r zipfile.zip directory/*adding: directory/src/ (stored 0%)adding: directory/src/Work.file (stored 0%)adding: directory/test.file (stored 0%)