Tüm alt dizinlerdeki tüm dosyaları bash'da tek bir sıkıştırılmış dosyaya nasıl sıkıştırırsınız?


201

Olası Çoğaltma:
bir dizi dizini gzip etmek ve katran sıkıştırılmış bir dosya oluşturmak

Bu yazı , bir dizin yapısı içinde her bir dosyanın ayrı ayrı nasıl gzipleneceğini açıklamaktadır. Ancak, biraz farklı bir şey yapmam gerekiyor. Belirli bir dizin altındaki tüm dosyalar için büyük bir gzip dosyası üretmem gerekiyor. Ayrıca sıkıştırılmış dosya (örneğin, files.gz) için çıkış dosya adını belirtmek ve zaten varsa eski sıkıştırılmış dosya dosyasının üzerine yazmanız gerekir.


gzipdoğası gereği sadece tek bir dosyayı sıkıştırır. Daha sonra gzipleme için birden çok dosyayı tek bir dosyaya koymak için kullanın tar.
Thomas

Yanıtlar:


389
tar -zcvf compressFileName.tar.gz folderToCompress

FolderToCompress içindeki her şey sıkıştırmaya gider

Düzenleme: İnceleme ve yorumlardan sonra insanların bir uzantı olmadan sıkıştırılmışDosyaAdı ile karışabilir fark etti. İsterseniz, compactFileName ile .tar.gz uzantısını (önerildiği gibi) kullanabilirsiniz


2
Teşekkürler. Bu, "folderToCompress" altındaki her şeyi sıkıştıracak mı (yani özyinelemeli)?
Doug

2
ToCompress içindeki her şey sıkıştırmaya
gidecekDosyaAdı

80
Muhtemelen seçmek isteyeceksiniz compressFileNameiçerdiği yüzden .tar.gzuzantısı veya herkes deli çekersiniz.
13:48

9
Bu aynı zamanda isteğe bağlı sayıda dizin için de çalışır, örneğin tar -zcvf two-dirs.tar.gz dir-one dir-twoiki dizin içeren bir arşiv oluşturur.
Zoltán

5
Ayrıca *geçerli tar -zcvf all.tar.gz *

61

yinelenen komut satırı ve son kitlenin kim olduğunu bilmek iyi çalışan birçok sıkıştırma yöntemi vardır.

yani windows çalıştıran birine gönderilecekse zip muhtemelen en iyi olurdu:

zip -r file.zip folder_to_zip

unzip filenname.zip

diğer linux kullanıcıları için veya kendi katranınız harika

tar -cvzf filename.tar.gz folder

tar -cvjf filename.tar.bz2 folder  # even more compression

#change the -c to -x to above to extract

Biri katran ve şeylerin nasıl tartıldığı / çıkartıldığına dikkat etmelidir, örneğin koşarsam

cd ~
tar -cvzf passwd.tar.gz /etc/passwd
tar: Removing leading `/' from member names
/etc/passwd


pwd

/ Home / myusername

tar -xvzf passwd.tar.gz

bu / home / myusername / etc / passwd dosyasını oluşturur

tüm tar sürümlerinin bunu yapıp yapmadığından emin değilim:

 Removing leading `/' from member names

18

@amitchhajer adlı kullanıcının gönderileri GNU tar. Birisi bu gönderiyi bulursa ve bir NON GNUsistemi üzerinde çalışması gerekirse, bunu yapabilir:

tar cvf - folderToCompress | gzip > compressFileName

Arşivi genişletmek için:

zcat compressFileName | tar xvf -

2
Portatif olmanın yanı sıra, gzip'e (örneğin, --test veya --best) argümanlar iletmek istiyorsanız bu çözüm yararlıdır, çünkü afaik GNU tar bile gzip'e argüman göndermek için bir yol sağlamaz.
Timothy Woods

Bu çok yönlüdür, çünkü diğer kompresörleri de kullanabilirsiniz. Örneğin pigz, CPU'yu daha iyi kullanabildiğinden daha hızlıdır (çok iş parçacıklı bir zip uygulaması).
Ortwin Angermeier
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.