Các zip
tiện ích dòng lệnh không bao giờ tạo ra một __MACOSX
thư mục, vì vậy bạn chỉ có thể chạy một lệnh như thế này:
zip directory.zip -x \*.DS_Store -r directory
Trong đầu ra bên dưới, a.zip
mà tôi đã tạo bằng zip
tiện ích dòng lệnh không chứa __MACOSX
thư mục, nhưng a 2.zip
tôi đã tạo từ Finder.
$ touch a
$ xattr -w somekey somevalue a
$ zip a.zip a
adding: a (stored 0%)
$ unzip -l a.zip
Archive: a.zip
Length Date Time Name
-------- ---- ---- ----
0 01-02-16 20:29 a
-------- -------
0 1 file
$ unzip -l a\ 2.zip # I created `a 2.zip` from Finder before this
Archive: a 2.zip
Length Date Time Name
-------- ---- ---- ----
0 01-02-16 20:29 a
0 01-02-16 20:31 __MACOSX/
149 01-02-16 20:29 __MACOSX/._a
-------- -------
149 3 files
-x .DS_Store
không loại trừ .DS_Store
các tập tin trong thư mục nhưng -x \*.DS_Store
không.
Tệp cấp cao nhất của kho lưu trữ zip có nhiều tệp thường phải là một thư mục, bởi vì nếu không, một số sử dụng không lưu trữ (như unzip
và 7z
, nhưng không phải là Tiện ích lưu trữ, Unarchiver unar
, hoặc dtrx
) không tạo thư mục chứa cho các tệp khi lưu trữ được trích xuất, điều này thường làm cho các tệp khó tìm và nếu nhiều tệp lưu trữ như vậy được trích xuất cùng một lúc, có thể khó biết được tệp nào thuộc về tệp lưu trữ nào.
Tiện ích lưu trữ chỉ tạo một __MACOSX
thư mục khi bạn tạo một kho lưu trữ trong đó ít nhất một tệp chứa siêu dữ liệu như thuộc tính mở rộng, cờ tệp hoặc một ngã ba tài nguyên. Thư mục __MACOSX
chứa các tệp AppleDouble có tên tệp bắt đầu bằng ._
được sử dụng để lưu trữ siêu dữ liệu dành riêng cho OS X. Các zip
tiện ích dòng lệnh vứt bỏ siêu dữ liệu như các thuộc tính mở rộng, cờ tập tin, và nĩa tài nguyên, trong đó cũng có nghĩa là siêu dữ liệu như thẻ bị mất, và rằng bí danh ngừng làm việc, bởi vì thông tin trong một tập tin bí danh được lưu trữ trong một ngã ba tài nguyên.
Thông thường bạn chỉ có thể loại bỏ siêu dữ liệu dành riêng cho OS X, nhưng để xem tệp siêu dữ liệu nào chứa, bạn có thể sử dụng xattr -l
. xattr
cũng bao gồm các nhánh tài nguyên và cờ tệp, bởi vì mặc dù chúng không thực sự được lưu trữ dưới dạng các thuộc tính mở rộng, chúng có thể được truy cập thông qua giao diện thuộc tính mở rộng. Cả Utility Utility và zip
tiện ích dòng lệnh đều loại bỏ ACL.