Saya ingin tar root (/) dan membiarkannya muncul sebagai / abc di arsip tar.
Apakah ada bendera tar untuk menentukan nama tingkat atas khusus?
Pilihan terdekat yang bisa saya temukan adalah --transform
opsi. 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 sed
perintah substitusi dan mengubah /
ke /abc
:
tar cf root.tgz --transform 's/^\//\/abc/' /
Ini masih akan mencetak /
jalur saat membuat arsip tetapi itu akan menjadi /abc
ketika Anda mengekstraknya.
Pendekatan lain, jika Anda tar
tidak memiliki --transform
opsi adalah membuat /abc
symlink yang menunjuk ke /
dan kemudian tar itu:
$ ln -s / /abc
$ tar chf root.tgz /abc
Sangat -h
penting karena itulah yang memberitahu tar
untuk mengikuti tautan:
-h, --dereference
follow symlinks; archive and dump the files they point to
Itu akan memiliki efek pengaturan /abc
sebagai direktori tingkat atas.
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 /
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.
tar: Removing leading / from member names
. Menggunakan's|^|abc/|'
bekerja dengan baik untuk saya.