Bagaimana cara menentukan nama "tingkat atas" yang berbeda untuk tar?


10

Saya ingin tar root (/) dan membiarkannya muncul sebagai / abc di arsip tar.

Apakah ada bendera tar untuk menentukan nama tingkat atas khusus?

Jawaban:


6

Pilihan terdekat yang bisa saya temukan adalah --transformopsi. Saya tidak tahu pasti, tapi saya kira ini hanya bendera GNU:

 --transform, --xform EXPRESSION
       use sed replace EXPRESSION to transform file names

Dengan menggunakan itu, Anda bisa melewati sedperintah substitusi dan mengubah /ke /abc:

tar cf root.tgz --transform 's/^\//\/abc/' /

Ini masih akan mencetak /jalur saat membuat arsip tetapi itu akan menjadi /abcketika Anda mengekstraknya.


Pendekatan lain, jika Anda tartidak memiliki --transformopsi adalah membuat /abcsymlink yang menunjuk ke /dan kemudian tar itu:

$ ln -s / /abc
$ tar chf root.tgz /abc

Sangat -hpenting karena itulah yang memberitahu taruntuk mengikuti tautan:

 -h, --dereference
       follow symlinks; archive and dump the files they point to

Itu akan memiliki efek pengaturan /abcsebagai direktori tingkat atas.


2

Dengan GNU tar, Anda dapat menggunakan perintah itu:

tar --transform="s|/|/abc/|" -Pcf bar.tar /

Jika tidak, berikut ini adalah cara portabel untuk melakukannya, yaitu yang tidak bergantung pada GNU atau ekstensi tar spesifik lainnya tetapi didasarkan pada alat POSIX yang harus tersedia pada mesin apa pun yang mematuhi Unix:

pax -w -s '/\//\/abc\//' -f foo.tar /

1

Inilah cara saya melakukannya yang berfungsi untuk tarring dari lokasi mana pun (bukan hanya /):

tar --transform 's|^|/abc/|' -zcvf /path/to/dest.tgz *

Ini hanya menambahkan a /abc/ke awal setiap jalur.


1
Saat mengekstraksi arsip yang dibuat dengan cara ini saya mendapat peringatan tar: Removing leading / from member names. Menggunakan 's|^|abc/|'bekerja dengan baik untuk saya.
Michael Platings
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.