Nhận mac tar để ngừng đặt ._ * tên tệp trong kho lưu trữ tar [trùng lặp]


46

Có thể trùng lặp:
Tại sao tôi nhận được các tệp như ._foo trong tarball của mình trên OS X?

Tôi tạo tập lệnh autoconf trên máy Mac. Khi tar chạy, nó sẽ đặt tất cả các tên ._ foobar này vào kho lưu trữ:

libewf-20110312/borlandc/builder5/ewfacquire/._ewfacquire.bpf
libewf-20110312/borlandc/builder5/ewfacquire/ewfacquire.bpf
libewf-20110312/borlandc/builder5/ewfacquire/._ewfacquire.bpr
libewf-20110312/borlandc/builder5/ewfacquire/ewfacquire.bpr

Bây giờ những gì đang diễn ra là hệ thống tệp HFS của Apple đang đặt các thuộc tính tệp vào tên ._ foobar để chúng có thể được khôi phục trên hệ thống Mac khác. Nhưng tôi không muốn họ --- họ chỉ là rác cho tôi. Có cách nào để đàn áp họ?



2
@geekizard Người dùng trên unix.SE đã từ bỏ và chấp nhận một câu trả lời sai.
Daniel Beck

Ngoài ra còn có một câu hỏi SU liên quan đến việc trích xuất đúng ._*các tệp từ kho lưu trữ (ví dụ .__init__.py) sử dụng cùng một giải pháp.
Chris Johnsen

Câu trả lời:


69

Mỗi câu trả lời cho một câu hỏi khác , bạn có thể đặt biến môi trường không có giấy tờ (?) COPYFILE_DISABLE để ngăn một số chương trình do hệ thống cung cấp (bao gồm tar ) có ý nghĩa đặc biệt đối với ._*các thành viên lưu trữ. Cụ thể, nó sẽ ngăn họ:

  • lưu trữ dữ liệu thuộc tính mở rộng (bao gồm các nhánh tài nguyên) trong ._*các thành viên lưu trữ
    (nghĩa là không lưu trữ các ô lưu trữ được tạo ra trên Mac OS X nhưng có nghĩa là để sử dụng trên các hệ thống khác) và

  • cố gắng trích xuất các thuộc tính hoặc tài nguyên mở rộng từ các thành viên lưu trữ có tên như ._*
    (nghĩa là không hiểu sai ._*các thành viên lưu trữ trong kho lưu trữ từ các hệ thống khác).

Giá trị bạn sử dụng cho biến môi trường không quan trọng (thậm chí nó có thể là chuỗi rỗng). Các giá trị như 0, và falsesẽ không thể kích hoạt tính năng này. Điều duy nhất quan trọng là liệu biến đó có được đặt hay không (bạn phải hủy cài đặt nó để bật tính năng này).

Bạn có thể sử dụng biến này trên các lệnh riêng lẻ bằng cách tận dụng khả năng của trình bao kiểu Bourne ( sh , ksh , bash , zsh , v.v.) để đặt tiền tố với các biến môi trường bổ sung.

COPYFILE_DISABLE=1 tar cf new.tar …

Nếu bạn gặp vấn đề thường xuyên hơn không, thì bạn có thể muốn đặt và xuất biến này trong một trong các tệp khởi tạo của shell.

# turn off special handling of ._* files in tar, etc.
COPYFILE_DISABLE=1; export COPYFILE_DISABLE

Khi bạn cần, sau đó bạn có thể hủy đặt biến cho các lệnh riêng lẻ.

(unset COPYFILE_DISABLE; tar cf somefile.tar …)

Trên hệ thống Mac OS X 10.6 này, tất cả các lệnh sau đây dường như đều biết về COPYFILE_DISABLE:

  • /usr/bin/tar(một liên kết tượng trưng đến bsdtar)
  • /usr/bin/bsdtar
  • /usr/bin/gnutar
  • /bin/pax

COPYFILE_DISABLE có nguồn gốc từ Mac OS X 10.5. Nếu bạn cần hỗ trợ 10,4, nó có COPY_EXTENDED_ATTRIBUTES_DISABLE hoạt động theo cùng một cách.


Ôi. Chỉ cần những gì tôi đang tìm kiếm. Cảm ơn. Các tập tin autoconf của tôi sẽ sạch hơn rất nhiều.
vy32

0

Không phải là một chuyên gia, nhưng một chút googling đã tìm thấy điều này: http://www.ofzenandcomputing.com/zanswers/3422

và điều này: http://hintsforums.macworld.com/archive/index.php/t-28703.html

Lệnh thứ hai có vẻ như có thể được tích hợp vào một tập lệnh ... bạn có thể không thể ngăn việc tạo các tệp ngã ba tài nguyên nhưng bạn có thể tự động xóa chúng sau đó.

chỉnh sửa: Tôi nên đề cập đến điều này có thể có kết quả xấu, sử dụng có nguy cơ của riêng bạn.


1
Kịch bản loại bỏ các tài nguyên từ các tệp trên đĩa cục bộ. Chúng thường phục vụ một mục đích (chẳng hạn như thay đổi ứng dụng liên quan đến một tệp nhất định), vì vậy điều này sẽ đi kèm với một cảnh báo lớn.
Daniel Beck

Kịch bản không giúp tôi. Nó loại bỏ các tập tin từ đĩa, không phải từ kho lưu trữ tar. Hóa ra tôi không có các tệp tài nguyên trên đĩa của mình. Nhưng chúng đang được đưa vào kho lưu trữ. Và không giống như các tệp zip, bạn không thể xóa các tệp khỏi kho lưu trữ tar.
vy32

(bah, hết giờ) Trên thực tế, bạn có thể nếu sử dụng khá nhiều tarngoại trừ libarchivedựa trên BSD (bao gồm cả Mac OS X), nhưng có thể không đáng tin cậy; cài đặt GNU tar thường là một ý tưởng tốt. (Tuy nhiên, điều này thật đau đớn. Tôi nghĩ rằng bạn cần liệt kê tất cả chúng và sau đó chuyển các tên đó trên dòng lệnh.) các ._tệp là cách lưu trữ các tài nguyên của OS X ở những nơi không hỗ trợ các thuộc tính mở rộng.
geekizard

0

Bạn có thể thử tự biên dịch tarhoặc cài đặt nó từ Macports hoặc Fink nếu có (Homebrew không có nó). Với một số "may mắn", nó không biết gì về siêu dữ liệu OS X và bỏ qua việc tạo các tệp đó.


Tôi đánh giá cao một lời giải thích cho downvote. Cảm ơn bạn.
Daniel Beck
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.