Tek bir klasörü büyük bir tar.gz arşivinden nasıl çıkartırsınız?


132

Bu komutu 5GB arşivde kullanıyorum

tar -zxvf archive.tar.gz /folder/in/archive

Bunu yapmanın doğru yolu bu mu? Sonsuza kadar komut satırı çıkışı olmadan alıyor gibi görünüyor ...


Mutlak veya göreceli bir yol mu kullandınız? Doğru göründüğünden başka göreceli olmalıdır. Ne kadar süre çalışmasına izin verdiniz ve sisteminiz ne kadar iyi? O alacak en az bir hızlı makinede birkaç dakika. Potansiyel olarak bir saat veya daha fazla? Şimdi bir test yapıyorum.
Kevin

Evet, ~ 1 saat sonra tamamlandı, ancak mutlak yol yanlıştı, haklıydınız.
Garrett Hall

5
Linux'ta arşivle kadar içine nasıl izleyebilirsiniz tarile cat /proc/$(pidof tar)/fdinfo/0(birden fazla varsa komutu adapte tarsürecini çalıştıran).
Gilles

Önemli kısmı da hiçbir takip eğik çizgi değildir. Kullanmak folder/folder2/işe yaramaz.
Marki555

Yanıtlar:


145

tarGöreceli yolları varsayılan olarak depolar . GNU katran bile diyor ki, eğer mutlak bir yol saklamaya çalışırsanız:

tar -cf foo.tar /home/foo
tar: Removing leading `/' from member names

Belirli bir klasörü çıkartmanız gerekirse, tar dosyasında neler olduğuna bakın:

tar -tvf foo.tar

Ve tam dosya adını not edin. Benim durumunda foo.tardosyanın, ben ayıklamak olabilir /home/foo/bardiyerek:

tar -xvf foo.tar home/foo/bar # Note: no leading slash

Yani hayır, gönderdiğiniz yol (mutlaka) bunu yapmanın doğru yolu değildir. Baştaki eğik çizgiyi dışlamak zorundasın. Mutlak yolları simüle etmek istiyorsanız, cd /önce yapın ve süper kullanıcı olduğunuzdan emin olun. Ayrıca, bu aynı şeyi yapar:

tar -C / -xvf foo.tar home/foo/bar # -C is the ‘change directory’ option

tarYolları göreceli olanlara dönüştürmenin nedenleri çok açık ve iyi nedenler var. Birincisi, arşivi orijinal kaynağının dışındaki yerlere geri yükleme yeteneğidir. Diğeri güvenlik. Bir arşivi çıkartabilir, dosyalarının geçerli çalışma dizininizde görünmesini bekleyebilir ve bunun yerine sistem dosyalarının (veya kendi çalışmanızın) yanlışlıkla başka bir yere yazabilirsiniz.

Not: Kullanmak eğer -Pseçeneği, tar olacak mutlak yolları arşiv. Bu yüzden, çıkartmadan önce büyük arşivlerin içeriğini kontrol etmeyi her zaman öder.


36
--strip-components=Nburada bazılarına yararlı olabilir.
Acumenus

2
benim durumumun ./foldername/yerine yazmak gerekliydi foldername, sanırım bunun sebebi katranı yarattığımda oluşturduğum ve katranı tar -cvf santi.tar ./*"listelediğimde" söylediği şeydi çünküdrwxr-xr-x santi/santi 0 2016-04-11 09:42 ./foldername/
santiago arizti

1
Ve hakkında .gz?
Peter Krauss

1
@PeterKrauss -xvf, -xzvf( -zseçenek ekleyerek ) olarak değişir ve açık bir foo.tarşekilde foo.tar.gzveya arşivinizin adı ne olursa olsun değişir . Aynı durum -j(bz2) ve bazı yeni sürümlerde -J(xz) için de geçerlidir. Aksi takdirde, gibi bir boru hattı zcat foo.tar.gz | tar -xvf - …da çalışır.
Alexios

Unutmayın, ekstraksiyon sırasında tüm ayrıntılı çıktılardan bıktıysanız, sadece vtüm örneklerde atlayın . Örneğin, tar -tf foo.tarve tar -xf foo.tar ....
Bo R
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.