Pertanyaan Bagaimana saya bisa membuat arsip zip dari seluruh direktori via terminal tanpa file yang tersembunyi?


Saya memiliki proyek dengan banyak folder / file tersembunyi di dalamnya. Saya ingin membuat arsip zip-nya, 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 bekerja:

zip -r zipfile.zip directory -x .*

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


189
2017-08-27 18:01


asal




Jawaban:


Ini juga mengecualikan file tersembunyi di direktori yang tidak disembunyikan:

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

98
2017-08-27 19:27



Terima kasih atas jawaban anda. Perintah (find community-chess/ -path '*/.*' -prune -o -type f -print | zip ~/community-chess.zip -@) lebih panjang dari yang diharapkan, tetapi berfungsi dengan baik. Subdirektori juga disertakan, jadi +1 dan jawaban yang diterima :-) - Martin Thoma


Pertama-tama jika Anda belum memasang zip instal terlebih dahulu sebagai berikut:

sudo apt-get install zip

Kemudian hanya dengan 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 -@

67
2017-08-11 06:28



Terima kasih atas usaha Anda untuk membantu sesama pengguna Ubuntu. Harap diingat bahwa menyatakan kembali jawaban yang diterima dalam jawaban baru hanya menambah kekacauan dan memiliki kemungkinan besar ditandai untuk dihapus. - hmayag


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

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

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

rinzwind@discworld:~/tmp$ ls -la
drwxr-xr-x  2 rinzwind rinzwind 4096 2011-08-28 00:15 tmp
drwxr-xr-x  2 rinzwind rinzwind 4096 2011-08-28 00:15 .tmp
rinzwind@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%)

52
2017-08-27 19:17



Saya tidak berpikir pernyataan terakhir Anda benar. .* akan diperluas oleh shell. - hammar
Saya pikir itu mungkin benar tetapi saya menghapusnya (tidak yakin tentang hal itu) :) - Rinzwind
ini tidak berhasil. Direktori .vn ditambahkan - Martin Thoma
@moose Pola kecualikan cocok dengan path lengkap, bukan hanya nama basis file, jadi Anda harus mengecualikan */.* sebaik .* (*/ cocok dengan urutan direktori yang tidak kosong). - Gilles
Ini berjalan tanpa mengubah apapun! Jawaban Terbaik. - Whitecat


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 -@

8
2017-11-01 03:19





Contoh untuk mengecualikan semua folder yang diawali. :

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

Kompres lebih baik tetapi lebih lambat:

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

8
2018-05-21 16:51





Metode yang benar adalah:

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

5
2018-05-08 16:49



@downvoter: Apa yang salah, ini sepertinya bekerja untuk saya. - jobin
Masalah yang sama seperti Jawaban asli Rinzwind (sekarang dikoreksi): Anda tidak mengecualikan subdirektori. Dan seperti yang dicatat oleh Rinzwind, Anda perlu mengutip wildcard, jika tidak, shell akan memperluasnya. - Gilles


Sementara zipping dirs tidak termasuk beberapa ekstensi file:

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

4
2017-12-08 17:49





Tanpa folder dan file tersembunyi di 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%)

3
2018-02-15 08:45