Awali awalan dalam tar


12

Saat ini saya lakukan dalam skrip shell sangat tidak efisien:

cp -a $MYPATH /tmp/$VERSION
cd /tmp
tar cjf archive.tar.bz2 $VERSION

Saya ingin semuanya terkandung dalam direktori bernama $ VERSION - apakah ada cara untuk melakukan ini tanpa harus menyalin semuanya seperti pada skrip di atas?


Mengapa menyalinnya? Kenapa tidak tar cjf archive.tar.bz2 $MYPATH?
Chewie

1
@Chewie katanya, dia ingin versi $ sebagai dir induk dalam arsip.
Kent

Oh, aku melihatnya sekarang.
Chewie

Jawaban:


21

Versi GNU dari tar mendukung --transform opsi (dan aliasnya --xform ), Anda bisa menggunakannya seperti ini

tar --transform "s/^$MYPATH/$VERSION/" -cf archive.tar.bz2 "$MYPATH"

Misalnya, diberikan pohon direktori ini

foo
└── foo.txt

perintah

tar --transform "s/^foo/bar/" -cf foo.tar.bz2 foo

akan menghasilkan arsip seperti

$ tar -tf foo.tar.bz2
bar/
bar/foo.txt

3
Patut dicatat bahwa pendekatan ini mungkin memutus hubungan simbolik. Berlanjut flags=r; Memecahkan masalah seperti yang disebutkan dalam stackoverflow.com/a/29661783/388803 .
eregon

jangan menyertakan garis miring; ketika saya meletakkan garis miring di transformasi, awalan asli tidak terjawab; misalnya s/^a\//b\//, itu tar -t masih menunjukkan a/ sementara semua file lainnya berada di bawah b/; Saya menganggap ini berbahaya, dan saya tidak benar-benar perlu melindungi terhadap beberapa file lain dengan awalan yang sama yang bukan direktori dalam file tar; jadi tidak ada garis miring yang baik-baik saja, aku tidak keberatan mengetahui cara terbaik untuk menangani kasus ini a/ ditransformasikan tetapi tidak aa/ jika itu saudara kandung dari simpul akar.
ThorSummoner

13

Untuk tar direktori saat ini dan menambahkan awalan, ini bekerja untuk saya:

tar --transform 's,^\.,$VERSION,' -cf foo.tar .

0

Jika Anda bisa pergi tanpa mempertahankan tautan simbolis di dalam pohon file yang Anda tarring, Anda bisa melakukannya

ln -s $MYPATH /tmp/$VERSION
cd /tmp
tar cjhf archive.tar.bz2 $VERSION

Itu h Opsi berarti symlink dereference, yaitu termasuk file atau direktori yang ditunjuk oleh tautan tersebut daripada hanya mencatat fakta bahwa ada symlink dan apa yang ditunjukkan.

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.