Saya memiliki perintah berikut di bagian skrip shell cadangan:
tar -cjf site1.bz2 /var/www/site1/
Ketika saya daftar isi arsip, saya mendapatkan:
tar -tf site1.bz2
var/www/site1/style.css
var/www/site1/index.html
var/www/site1/page2.html
var/www/site1/page3.html
var/www/site1/images/img1.png
var/www/site1/images/img2.png
var/www/site1/subdir/index.html
Tetapi saya ingin menghapus bagian /var/www/site1
dari direktori dan nama file dalam arsip, untuk menyederhanakan ekstraksi dan menghindari struktur direktori konstan yang tidak berguna. Tidak pernah tahu, kalau-kalau saya akan mengekstrak situs web yang dicadangkan di tempat data web tidak disimpan /var/www
.
Untuk contoh di atas, saya ingin memiliki:
tar -tf site1.bz2
style.css
index.html
page2.html
page3.html
images/img1.png
images/img2.png
subdir/index.html
Jadi, ketika saya mengekstrak, file diekstraksi dalam direktori saat ini dan saya tidak perlu memindahkan file yang diekstrak setelahnya, dan agar struktur sub-direktori dipertahankan.
Sudah ada banyak pertanyaan tentang tar dan cadangan di stackoverflow
dan di tempat-tempat lain di web, tetapi kebanyakan dari mereka meminta untuk menjatuhkan seluruh struktur sub-direktori (perataan), atau hanya menambah atau menghapus inisial / dalam nama (saya tidak Saya tidak tahu apa yang berubah tepat saat mengekstraksi), tetapi tidak lebih.
Setelah membaca beberapa solusi yang ditemukan di sana-sini serta manual, saya mencoba:
tar -cjf site1.bz2 -C . /var/www/site1/
tar -cjf site1.bz2 -C / /var/www/site1/
tar -cjf site1.bz2 -C /var/www/site1/ /var/www/site1/
tar -cjf site1.bz2 --strip-components=3 /var/www/site1/
Tapi tidak satu pun dari mereka yang bekerja seperti yang saya inginkan. Beberapa tidak melakukan apa-apa, beberapa lainnya tidak lagi mengarsipkan sub-direktori.
Itu ada di dalam skrip shell cadangan yang diluncurkan oleh Cron, jadi saya tidak tahu, pengguna mana yang menjalankannya, apa path dan direktori saat ini, jadi selalu menulis path absolut diperlukan untuk semuanya, dan lebih suka tidak mengubah direktori saat ini untuk menghindari melanggar sesuatu lebih lanjut dalam skrip (karena tidak hanya membuat cadangan situs web, tetapi juga database, kemudian mengirim semua itu ke FTP dll.)
Bagaimana cara mencapai ini?
Apakah saya salah mengerti bagaimana opsi -C bekerja?
-C
berarti "ganti direktori", sementara mengganti jalur (atau awalan) hanya bisa dilakukan oleh --transform
. rif. superuser.com/questions/595510/prepend-prefix-in-tar/595512 Anda dapat simpel -C (ubah direktori) dan --transformasi: `` `tar cjf site1.bz2 --transform" s / ^ \. \ // $ targetbase / "-C / var / www / site1. `` `