GNU/Linux >> Belajar Linux >  >> Linux

Buat Arsip Tar Dari Direktori, Kecuali Untuk File Tersembunyi?

Saya ingin membuat arsip tar dari direktori tertentu (tentu saja dengan subdirektori). Tetapi ketika saya melakukannya, menggunakan perintah tar, saya mendapatkan daftar file yang disertakan, misalnya:

a calendar_final/._style.css

a calendar_final/style.css

Seperti yang Anda lihat, ada dua versi dari file yang sama. Ini berlaku untuk setiap file, dan ada banyak. Bagaimana cara mengecualikan file sementara, dengan awalan ._, dari arsip tar?

Jawaban yang Diterima:

Anda memposting di komentar bahwa Anda sedang mengerjakan sistem Mac OS X. Ini adalah petunjuk penting untuk tujuan ._* ini file.

Ini ._* entri arsip adalah potongan data AppleDouble yang berisi informasi tambahan yang terkait dengan file terkait (yang tanpa ._ awalan). Mereka dihasilkan oleh copyfile(3) khusus Mac OS X keluarga fungsi. Gumpalan AppleDouble menyimpan data kontrol akses (ACL) dan atribut yang diperluas (umumnya, Finder flag dan “garpu sumber daya”, tetapi xattrs dapat digunakan untuk menyimpan semua jenis data).

Alat arsip Mac OS X yang disediakan sistem (bsdtar (juga disimbolkan sebagai tar ), gnutar , dan pax ) akan menghasilkan ._* anggota arsip untuk file apa pun yang memiliki informasi tambahan yang terkait dengannya; dalam mode "unarchive", mereka juga akan memecahkan kode anggota arsip tersebut dan menerapkan informasi tambahan yang dihasilkan ke file terkait. Tindakan ini membuat arsip “full fidelity” untuk digunakan pada sistem Mac OS X dengan mempertahankan dan kemudian mengekstrak semua informasi yang dapat disimpan oleh sistem file HFS+.

Alat arsip terkait pada sistem lain tidak tahu untuk memberikan penanganan khusus pada ._* ini file, sehingga mereka membongkar sebagai file normal. Karena file seperti itu tidak berguna di sistem lain, mereka sering dianggap sebagai "file sampah". Sejalan dengan itu, jika sistem non-Mac OS X menghasilkan arsip yang menyertakan file normal yang dimulai dengan ._ , alat pengarsipan Mac OS X akan mencoba memecahkan kode file tersebut sebagai informasi tambahan.

Namun, ada cara tidak berdokumen(?) untuk membuat pengarsipan Mac OS X yang disediakan sistem berperilaku seperti yang mereka lakukan pada sistem Unixy lainnya:variabel lingkungan COPYFILE_DISABLE. Menyetel variabel ini (ke nilai apa pun, bahkan string kosong), akan mencegah pengarsip menghasilkan ._* anggota arsip untuk mewakili informasi tambahan yang terkait dengan file yang diarsipkan. Kehadirannya juga akan mencegah pengarsip mencoba menafsirkan anggota arsip tersebut sebagai informasi tambahan.

COPYFILE_DISABLE=1 tar czf new.tar.gz …
COPYFILE_DISABLE=1 tar xzf unixy.tar.gz …

Anda dapat menyetel variabel ini di file inisialisasi shell jika Anda ingin bekerja dengan cara ini lebih sering daripada tidak.

# disable special creation/extraction of ._* files by tar, etc. on Mac OS X
COPYFILE_DISABLE=1; export COPYFILE_DISABLE

Kemudian, ketika Anda perlu mengaktifkan kembali fitur tersebut (untuk mempertahankan/mengembalikan informasi yang diperluas), Anda dapat “menghapus” variabel untuk setiap perintah:

(unset COPYFILE_DISABLE; tar czf new-osx.tar.gz …)

Pengarsip di Mac OS X 10.4 juga melakukan hal serupa, meskipun mereka menggunakan variabel lingkungan yang berbeda:COPY_EXTENDED_ATTRIBUTES_DISABLE

Terkait:Redirect STDERR dan STDOUT ke variabel yang berbeda tanpa file sementara?
Linux
  1. Buat Direktori Target Saat Mengekstrak Tarball?

  2. Buat folder khusus untuk setiap file zip di direktori dan ekstrak file zip

  3. Cara membuat arsip zip yang kompatibel dengan Linux dari sebuah direktori di Mac

  1. Bagaimana cara membuat arsip tar dipecah menjadi, atau mencakup, banyak file?

  2. Bagaimana cara tar file dengan urutan yang diurutkan?

  3. Menambahkan file ke file tbz

  1. Cara Membuat Direktori Bersama untuk Semua Pengguna di Linux

  2. Cara Mengarsipkan File Dan Direktori Di Linux [Bagian 1]

  3. Bagaimana cara mengecualikan file dari arsip TAR menggunakan ekspresi reguler?