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?
tar cjf archive.tar.bz2 $MYPATH
?Jawaban:
Versi GNU dari
tar
mendukung--transform
opsi (dan aliasnya--xform
), Anda bisa menggunakannya seperti iniMisalnya, diberikan pohon direktori ini
perintah
akan menghasilkan arsip seperti
sumber
flags=r;
Memecahkan masalah seperti yang disebutkan dalam stackoverflow.com/a/29661783/388803 .s/^a\//b\//
, itutar -t
masih menunjukkana/
sementara semua file lainnya berada di bawahb/
; 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 inia/
ditransformasikan tetapi tidakaa/
jika itu saudara kandung dari simpul akar.Untuk tar direktori saat ini dan menambahkan awalan, ini bekerja untuk saya:
sumber
Jika Anda bisa pergi tanpa mempertahankan tautan simbolis di dalam pohon file yang Anda tarring, Anda bisa melakukannya
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.sumber