Bir yedek kabuk komut dosyası bölümünde aşağıdaki komutu var:
tar -cjf site1.bz2 /var/www/site1/
Arşiv içeriğini listelediğimde:
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
Ancak /var/www/site1
çıkarma işlemini basitleştirmek ve gereksiz sabit dizin yapısından kaçınmak için parçayı arşiv içindeki dizin ve dosya adlarından kaldırmak istiyorum . Bilmiyorum, yedeklenmiş web sitelerini web verilerinin depolanmadığı bir yerde çıkarırsam /var/www
.
Yukarıdaki örnek için, sahip olmak istiyorum:
tar -tf site1.bz2
style.css
index.html
page2.html
page3.html
images/img1.png
images/img2.png
subdir/index.html
Böylece, ayıkladığımda, dosyalar geçerli dizinde ayıklanır ve ayıklanan dosyaları daha sonra taşımama gerek kalmaz ve böylece alt dizin yapıları korunur.
Zaten stackoverflow
web üzerinde ve diğer yerlerde katran ve yedekleme hakkında birçok soru var , ancak çoğu tüm alt dizin yapısını düşürmeyi (düzleştirme) ya da sadece adların başındaki / t Çıkarırken tam olarak neyin değiştiğini bilmiyorum), ama artık yok.
Burada ve orada bulunan çözümlerin bazılarını ve kılavuzu okuduktan sonra denedim:
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/
Ama hiçbiri istediğim gibi çalışmadı. Bazıları hiçbir şey yapmaz, bazıları ise artık alt dizinleri arşivlemez.
Bir Cron tarafından başlatılan bir yedek kabuk komut dosyası içinde, bu yüzden iyi bilmiyorum, hangi kullanıcı çalıştırır, yol ve geçerli dizin nedir, bu yüzden her zaman mutlak yol yazmak her şey için gereklidir ve geçerli dizini değiştirmemeyi tercih ederim komut dosyasında bir şeyleri kırmaktan kaçınmak için (çünkü sadece web sitelerini değil, aynı zamanda veritabanlarını da yedekler, sonra hepsini FTP'ye gönderir vb.
Bunu nasıl başarabilirim?
-C seçeneğinin nasıl çalıştığını yanlış anladım mı?
-C
sadece "dizin değiştirme" anlamına gelirken, bir yol (veya önek) değiştirmek sadece tarafından yapılabilir --transform
. rif. superuser.com/questions/595510/prepend-prefix-in-tar/595512 basitçe -C (dizini değiştir) ve --transform yapabilirsiniz: `` tar cjf site1.bz2 --transform "s / ^ \. \ // $ targetbase / "-C / var / www / site1. ``