Kompres file secara rekursif dalam direktori dan subdirektori menggunakan alat "zip" baris perintah di Mac OS X dan mengecualikan file .DS_Store dari SEMUA subfolder

10

Saya mencoba membuat file ZIP menggunakan zipalat baris perintah yang datang dengan Terminal Mac OS X. Saya ingin secara kompres mengkompresi isi folder saat ini tetapi tidak termasuk .DS_Storefile. Saya mencoba dengan ini:

zip -r myarchive.zip . -x .DS_Store

Tidak -x .DS_Storetermasuk .DS_Storefile dalam folder saat ini, tetapi tidak dalam subfolder yang ditambahkan secara rekursif. Bagaimana cara mengecualikan semua .DS_Storefile dari SEMUA subfolder juga?

OMA
sumber

Jawaban:

17

Tambahkan wildcard ke opsi kecualikan

zip -r myarchive.zip . -x "*.DS_Store"
fd0
sumber
Terima kasih atas jawaban anda. Berhasil, tapi mengapa? :) Bisakah Anda jelaskan?
OMA
The *mengembang apa-apa atau bagian dari jalan sebagai pos rekursif kompres file dan direktori mereka. Jadi, ./.DS_Storedulu ./*/.DS_Storedan seterusnya dikecualikan dari arsip.
fd0
Ah, menarik. Jadi wildcard bekerja secara berbeda dari di dunia Windows, di mana "* .DS_Store" hanya berarti "file apa pun yang berakhir dengan .DS_Store"
OMA
1

Sebagian besar waktu saya ingin mengecualikan semua file tersembunyi, seperti .DS_Storeatau .gitatau.gitignore

Dengan satu perintah sederhana Anda dapat mengatasi semua itu dan mengompres semua file dan subfolder secara rekursif

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

Atau lebih baik lagi, buat fungsi di zsh untuk membuat hidup lebih mudah

open ~/.zshrc

Tambahkan kode berikut di bagian alias Anda

function zip-visible(){
    zip -r $1 $2 -X -x "*/\.*"
}

Muat ulang konfigurasi zsh

source ~/.zshrc

Gunakan seperti ini

zip-visible archive.zip folder

alev
sumber