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?

bagaimanapun
sumber

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.

terdon
sumber
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 /
Jlliagre
sumber
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.

Zane Hooper
sumber
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