2012-12-18 11 views
14

korumak değil, mutlak yol çıkan sıkıştırılmış dosyada korunur. Sıkıştırmak istediğim klasörün bulunduğu tar'a söylemek için mutlak yollar kullanmam gerekiyor, ama sadece bu klasörü sıkıştırmak istiyorum - tüm yolu değil. ÖrneğinUnix tar: Mutlak yolları kullanarak <code>tar</code> ile dosya ve dizinleri sıkıştırmaya çalıştığınızda dizin yapısını

, tar -cvzf test.tar.gz /home/path/test - Ben klasörü test sıkıştırmak istiyorum. Bununla birlikte, aslında sıkıştırdığım şey /home/path/test'dur. Bunu önlemek için yapılabilecek bir şey var mı? -C işlenen ile oynamaya çalıştım.

+0

var mı? Değilse büyük olasılıkla Stack Overflow yerine Unix.SE'ye aittir. Bu shellscripting ilgili olabilir ancak gerçek – dmckee

+0

, ben bir kabuk komut dosyası için kullanıyorum –

+0

.. gibi etiketlenmiş ama bağlamın bir dış sorunu azaltılmış değil. Bir çözüm bulmak için fazladan detay (aka bağlam) sağlamaya ihtiyacım olabilir, bu yüzden burada yayınladım. Bunu şimdi etiketleyeceğim. –

cevap

17

Kullanım -C Eğer istediğiniz gibi dosyaları bakmak dizini de belirtmek için, ve bu dizinde görüldüğü haliyle ardından dosyaları belirtin:

tar -cvzf test.tar.gz -C /home/path test 
+1

Bu, dizin yapısını * göreceli olarak * belirtilen kök dizinine korur, soruyu soruyor gibi görünmüyor (ancak OP'nin gerekli olduğu belliydi), ancak +1 çünkü tam da aradığım şey buydu (ve diğer cevaptaki tek taraflı düzleştirme yaklaşımı, tuhaf bir şey gibi görünüyor). –

23

Bu çirkin ... ama çalışıyor ...

Bu aynı sorunu vardı ama birden fazla klasöre ile, sadece düz için her dosyaları istedi. Bir sed ifadesini geçmek için "dönüştür" seçeneğini kullanabilir ve ... beklendiği gibi çalışır.

bu

ifadesidir:

's/.*\///g' (her şeyi silmeden önce '/')

Bu son komut: cvzf

tar --transform 's/.*\///g' -zcvf tarballName.tgz */*/*.info 
+5

Gördüğüm tek cevap bu * aslında * aradığım şeyi yapıyor. –

+0

http://serverfault.com/a/566345/343194 ile birlikte birden çok dizin için daha iyi sonuç elde edilebilir. Bulmak gibi bir şey./commondir -type f | tar --transform '/.*\/// g' -cvzf ./file.tar.gz --files-from =/dev/stdin '. Bu şekilde boş çocuk dizinleri hariç tutulacak. –

0

çok dizin örneği

katran benim tar.gz example.zip -C dizin1 files_under_dir1 -C dir2 files_under_dir2

Dir 1/2 altındaki dosyaların yolu olmamalıdır. Buna bir programlama bağlam