Dapatkan mac tar untuk berhenti meletakkan ._ * nama file di arsip tar [duplikat]

46

Kemungkinan Duplikat:
Mengapa saya mendapatkan file seperti ._foo di tarball saya di OS X?

Saya membuat skrip autoconf pada Mac. Ketika tar berjalan, ia menempatkan semua nama ._ foobar ini di arsip:

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

Sekarang apa yang terjadi adalah sistem file HFS Apple menempatkan properti file dalam nama ._ foobar sehingga mereka dapat dikembalikan pada sistem Mac lain. Tetapi saya tidak menginginkannya --- mereka hanya sampah bagi saya. Apakah ada cara untuk menekan mereka?

ay32
sumber
2
@geekosaur Pengguna di unix.SE menyerah dan menerima jawaban yang salah.
Daniel Beck
Ada juga pertanyaan terkait pertanyaan SU tentang mengekstraksi ._*file dengan benar dari arsip (misalnya .__init__.py) yang menggunakan solusi yang sama.
Chris Johnsen

Jawaban:

69

Per jawaban atas pertanyaan lain , Anda dapat mengatur variabel lingkungan tidak terdokumentasi (?) COPYFILE_DISABLE untuk mencegah beberapa program yang disediakan sistem (termasuk tar ) memberi makna khusus kepada ._*anggota arsip. Secara khusus, itu akan mencegah mereka dari:

  • menyimpan data atribut yang diperluas (termasuk garpu sumber daya) di ._*anggota arsip
    (yaitu jangan "mencemari" arsip yang dibuat pada Mac OS X tetapi dimaksudkan untuk digunakan pada sistem lain), dan

  • mencoba untuk mengekstraksi atribut atau sumber daya yang diperluas dari anggota arsip bernama seperti ._*
    (yaitu jangan salah mengartikan ._*anggota arsip dalam arsip dari sistem lain).

Nilai yang Anda gunakan untuk variabel lingkungan tidak penting (bahkan bisa berupa string kosong). Nilai suka 0, dan falsetidak akan mengaktifkan kembali fitur. Satu-satunya hal yang penting adalah apakah variabel diatur (Anda harus "membatalkan" untuk mengaktifkan kembali fitur).

Anda dapat menggunakan variabel ini pada perintah individual dengan memanfaatkan kemampuan shell Bourne-style ( sh , ksh , bash , zsh , dll.) Untuk mengawali perintah dengan variabel lingkungan tambahan.

COPYFILE_DISABLE=1 tar cf new.tar …

Jika Anda mengalami masalah lebih sering daripada tidak, maka Anda mungkin ingin mengatur dan mengekspor variabel ini di salah satu file inisialisasi shell Anda.

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

Jika perlu, Anda dapat menghapus variabel untuk setiap perintah.

(unset COPYFILE_DISABLE; tar cf somefile.tar …)

Pada sistem Mac OS X 10.6 ini, semua perintah berikut sepertinya tahu tentang COPYFILE_DISABLE:

  • /usr/bin/tar(tautan simbolis ke bsdtar)
  • /usr/bin/bsdtar
  • /usr/bin/gnutar
  • /bin/pax

COPYFILE_DISABLE berasal dari Mac OS X 10.5. Jika Anda perlu mendukung 10.4, ada COPY_EXTENDED_ATTRIBUTES_DISABLE yang berfungsi dengan cara yang sama.

Chris Johnsen
sumber
WOW. Apa yang saya cari. Terima kasih. File autoconf saya akan jauh lebih bersih.
vy32
0

Bukan seorang ahli, tetapi sedikit googling menemukan ini: http://www.ofzenandcomputing.com/zanswers/3422

dan ini: http://hintsforums.macworld.com/archive/index.php/t-28703.html

Perintah kedua sepertinya dapat dimasukkan ke dalam skrip ... Anda mungkin tidak dapat mencegah pembuatan file sumber daya garpu tetapi Anda dapat secara otomatis menghapusnya setelah itu.

sunting: Saya seharusnya menyebutkan ini mungkin memiliki hasil yang buruk, gunakan dengan risiko Anda sendiri.

CreeDorofl
sumber
1
Skrip menghapus garpu sumber daya dari file di disk lokal. Mereka biasanya melayani tujuan (seperti mengubah aplikasi terkait file tertentu), jadi ini harus datang dengan peringatan besar.
Daniel Beck
Skrip tidak membantu saya. Ini menghapus file dari disk, bukan dari arsip tar. Ternyata saya tidak memiliki file sumber daya pada disk saya. Tapi mereka dimasukkan ke dalam arsip. Dan tidak seperti file zip, Anda tidak bisa hanya menghapus file dari arsip tar.
vy32
(bah, batas waktu) Sebenarnya, Anda bisa jika menggunakan hampir semua tarkecuali yang libarchiveberbasis BSD (ini termasuk Mac OS X), tetapi mungkin tidak dapat diandalkan; menginstal tar GNU seringkali merupakan ide yang bagus. (Namun, ini menyakitkan. Saya pikir Anda perlu mendaftar semuanya dan kemudian meneruskan nama-nama itu pada baris perintah) dengan ._file-file tersebut dengan cara OS X menyimpan sumber daya garpu di tempat-tempat yang tidak mendukung atribut diperpanjang.
geekosaur
0

Anda dapat mencoba kompilasi sendiri tar, atau memasangnya dari Macports atau Fink jika tersedia (Homebrew tidak memilikinya). Dengan sedikit "keberuntungan", ia tidak mengetahui metadata OS X dan melewatkan membuat file-file itu.

Daniel Beck
sumber
Saya menghargai penjelasan untuk downvote. Terima kasih.
Daniel Beck