Bagaimana Saya bisa membuat arsip zip dari seluruh direktori melalui terminal tanpa file tersembunyi?

Saya memiliki proyek dengan banyak folder / file tersembunyi di dalamnya. Saya ingin membuat arsip zip, tetapi dalam arsip tidak boleh ada folder / file tersembunyi. Jika file dalam folder tersembunyi tidak disembunyikan, mereka juga tidak boleh disertakan.

Saya tahu bahwa saya dapat membuat arsip zip dari direktori seperti ini:

zip -r zipfile.zip directory

Saya juga tahu bahwa saya dapat mengecualikan file dengan opsi-x, jadi saya pikir ini mungkin berhasil:

zip -r zipfile.zip directory -x .*

Itu tidak berhasil. Semua direktori tersembunyi masih dalam zip-file.

Pertama-tama jika Anda belum menginstal zip menginstalnya terlebih dahulu sebagai berikut:

sudo apt-get install zip

Kemudian untuk hanya membuat file zip:

zip -r compressed_filename.zip foldername

Jika Anda ingin mengecualikan file tersembunyi:

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

Mengecualikan file dari arsip Zip(diambil dari http://osxdaily.com/2013/04/30/how-to-exclude-files-from-a-zip-archive/)

Dasar-dasar Pengecualian file saat membuat arsip zip berpusat di sekitar -x bendera, yang digunakan untuk mengecualikan file dari arsip yang cocok dengan nama atau pola tertentu. Pada itu yang paling dasar, akan terlihat seperti ini:

zip archive.zip files -x "ExcludeMe"

Artinya Anda dapat mengecualikan satu file, katakanlah itu bernama " Nothanks.jpg"

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

Mari kita bahas beberapa contoh spesifik di mana ini berguna.

Kecualikan .File DS_Store dari arsip Zip

Ini akan mencegah metadata Mac yang biasanya tidak terlihat .DS_Store file dari yang termasuk dalam arsip zip, yang dibundel dalam secara default:

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

Namun, jika direktori menyertakan subdirektori, Anda ingin menggunakan variasi lain dari perintah itu untuk mengecualikan file ds_store dari subdirektori juga:

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

Catatan: tidak semua shell memerlukan kutipan agar perintah ini berfungsi dengan baik, tetapi di shell bash (default untuk OS X) Anda perlu menggunakan tanda kutip untuk mengecualikan dengan wildcard dan pola.

Kecualikan jenis File tertentu dari arsip Zip

Dengan wildcard, Anda juga dapat mengecualikan semua file dari jenis tertentu dengan berfokus pada ekstensi. Misalnya, perintah ini akan zip seluruh direktori, minus apapun .jpg berkas:

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

Itu dapat dimodifikasi untuk ekstensi atau pola file tertentu yang cocok dengan nama file.

Mengecualikan .git atau .direktori svn dari arsip Zip

Zip direktori, minus .git dan isinya:

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

Zip folder, tanpa termasuk .svn direktori:

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

Kecualikan semua file tersembunyi dari arsip Zip

Karena pola dan wildcard dapat digunakan, Anda juga dapat mengecualikan salah satu atau semua file dan folder tak terlihat yang dibuat dengan diawali dengan titik, apakah itu direktori seperti .svn atau file individual seperti .bash_profile atau .htaccess.

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

Atau untuk mengecualikan semua file tak terlihat dari semua subdirektori:

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

Ini juga mengecualikan file tersembunyi di direktori unhidden:

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

Tambah " untuk .* (jika tidak, shell Anda mengembang .* direktori saat ini), dan juga mengecualikan file tersembunyi di subdirektori:

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

Ini akan menghasilkan file yang dimulai dengan . tidak akan ditambahkan ke dalam file zip Anda.

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%)

Contoh untuk mengecualikan semua folder yang dimulai dengan . :

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

Kompres lebih baik tetapi lebih lambat :

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

Yang ini mencakup semua"."direktori, subdirektori, dan"."file atau direktori dalam direktori...Pada dasarnya jawaban pertama tetapi termasuk tingkat atas"."file.

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

Metode yang benar adalah:

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

Sementara zipping dirs tidak termasuk beberapa ekstensi file:

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

Tanpa folder tersembunyi dan file dalam direktori:

zip -r zipfile.zip directory/*

direktori:

|── .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%)