Câu hỏi Làm thế nào tôi có thể tạo một kho lưu trữ zip của toàn bộ thư mục thông qua thiết bị đầu cuối mà không có tệp ẩn?


Tôi có một dự án với rất nhiều thư mục / tập tin ẩn trong đó. Tôi muốn tạo một kho lưu trữ zip của nó, nhưng trong kho lưu trữ không nên là bất kỳ thư mục / tệp ẩn nào. Nếu các tệp trong thư mục ẩn không bị ẩn, chúng cũng không được bao gồm.

Tôi biết rằng tôi có thể tạo một kho lưu trữ zip của một thư mục như thế này:

zip -r zipfile.zip directory

Tôi cũng biết rằng tôi có thể loại trừ các tệp bằng tùy chọn -x, vì vậy tôi nghĩ rằng điều này có thể hoạt động:

zip -r zipfile.zip directory -x .*

Nó không hoạt động. Tất cả các thư mục ẩn vẫn nằm trong tệp nén.


189
2017-08-27 18:01


gốc




Các câu trả lời:


Điều này cũng loại trừ các tệp ẩn trong các thư mục chưa được ẩn:

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

98
2017-08-27 19:27



Cảm ơn câu trả lời của bạn. Lệnh (find community-chess/ -path '*/.*' -prune -o -type f -print | zip ~/community-chess.zip -@) dài hơn dự kiến, nhưng nó hoạt động tốt. Thư mục con cũng được bao gồm, vì vậy +1 và câu trả lời được chấp nhận :-) - Martin Thoma


Trước tiên, nếu bạn chưa cài đặt zip, hãy cài đặt nó trước tiên như sau:

sudo apt-get install zip

Sau đó, chỉ cần tạo tệp zip:

zip -r compressed_filename.zip foldername

Nếu bạn muốn loại trừ các tệp bị ẩn:

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

69
2017-08-11 06:28



Cảm ơn bạn đã nỗ lực giúp đỡ người dùng Ubuntu. Hãy nhớ rằng việc nói lại câu trả lời được chấp nhận trong một câu trả lời mới chỉ thêm vào sự lộn xộn và có khả năng cao bị gắn cờ để xóa. - hmayag


Thêm vào " đến .* (nếu không, vỏ của bạn sẽ mở rộng .* vào các tệp dấu chấm trong thư mục hiện tại) và cũng loại trừ các tệp ẩn trong các thư mục con:

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

Điều này sẽ dẫn đến các tệp bắt đầu bằng một . không được thêm vào tệp zip của bạn.

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



Tôi không nghĩ câu cuối cùng của bạn là chính xác. .* sẽ được mở rộng bởi vỏ. - hammar
Tôi nghĩ rằng nó có thể là chính xác nhưng tôi loại bỏ nó (không chắc chắn về nó) :) - Rinzwind
điều này không hiệu quả. Các thư mục .svn đã được thêm - Martin Thoma
@moose Mẫu loại trừ khớp với đường dẫn đầy đủ, không chỉ tên cơ sở tệp, vì vậy bạn cần loại trừ */.* cũng như .* (*/ khớp với bất kỳ chuỗi thư mục không trống nào). - Gilles
Điều này chạy mà không thay đổi bất cứ điều gì! Câu trả lời hay nhất. - Whitecat


Điều này bao gồm tất cả "." thư mục, thư mục con và "." tệp hoặc thư mục trong thư mục ... Về cơ bản câu trả lời đầu tiên nhưng bao gồm cấp cao nhất "." các tập tin.

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

8
2017-11-01 03:19





Ví dụ để loại trừ tất cả các thư mục bắt đầu bằng. :

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

Nén tốt hơn nhưng chậm hơn:

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

8
2018-05-21 16:51





Phương pháp chính xác sẽ là:

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

5
2018-05-08 16:49



@ downvoter: Có gì sai, điều này dường như đang làm việc cho tôi. - jobin
Cùng một vấn đề như với Câu trả lời ban đầu của Rinzwind (hiện đã được sửa): bạn không loại trừ các thư mục phụ. Và như Rinzwind đã lưu ý, bạn cần trích dẫn các ký tự đại diện, nếu không thì shell sẽ mở rộng chúng. - Gilles


Trong khi nén thư mục, ngoại trừ một số phần mở rộng tệp:

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

4
2017-12-08 17:49





Không có thư mục và tệp ẩn trong thư mục:

zip -r zipfile.zip directory/*

danh mục: |── .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