Boyut sınırı olan dosyalar nasıl sıkıştırılır?


19

Bir klasörden dosyaları zip bir komut dosyası var. Sıkıştırılmış dosyanın 10 MB'den fazla olmadığından emin olmak istiyorum. Boyut 10 MB'den büyükse, başka bir ZIP dosyası oluşturmalıdır.

Bunun için kullanılabilecek herhangi bir komut (veya başka bir yöntem) var mı?


1
Soru vardır gzip etiketi ancak metin atıfta zip , sen netleştirebilirsiniz? (Cevaplar farklı biçimlere dayalı yaklaşımlar arasında bölünmüştür.)
Håkan Lindqvist

Etikete zip ekleyemiyorum, bu yüzden gzip kullandım, bu soruna uyabileceğim bir gzip yönteminiz varsa, bunu da kullanabilirim.
Vishnu

Yanıtlar:


21

Sen "kullanabilirsiniz bölünmüş arşiv " nin "işlevselliğini zip " kullanarak "kendisi --split boyutlu " seçeneğini.

"Zip" kılavuzundan (" man zip"):

(...)

Bölünmüş arşivlerin bir kullanımı, büyük bir arşivi birden çok çıkarılabilir
medyada depolamaktır . 20 bölünmüş dosya içeren bir bölünmüş arşiv için dosyalar tipik olarak
adlandırılır (
ARCHIVE'ı arşivinizin adıyla değiştirin) AR‐ CHIVE.z01, ARCHIVE.z02, ..., ARCHIVE.z19, ARCHIVE.zip. Not
geçen dosya .zip dosyasıdır.

(...)

-s bölünmüş
boyut - bölünmüş boyutlu bölünmüş boyut

Bölünmüş boyut, isteğe bağlı olarak bir çarpan ile gelen bir sayıdır.
Şu anda sayı bir tamsayı olmalıdır. Çarpan şu
anda k (kilobayt), m (megabayt), g (gigabayt)
veya t (terabayt) olabilir. Minimum bölme boyutu 64k olduğundan,
çarpanları olmayan sayılar varsayılan olarak megabayttır. Örneğin, CD dizini yazmak için yararlı olabilecek 670 MB'lık bölünmelerle
bar
dizininin içeriğiyle foo adlı bir bölünmüş arşiv oluşturmak için
, komut:

                zip -s 670m -r foo bar

kullanılabilir.

Bu nedenle, bölünmüş bir zip arşivi oluşturmak için aşağıdakileri yapabilirsiniz (" -r" dizinin alt dizinlerini içerecek "özyinelemeli" anahtardır):

$ zip -r -s 10m archive.zip directory/

Dosyayı açmak için " zip" kılavuzunda "-s 0`" anahtarını kullanmanız gerektiği açıklanmaktadır:

(...)

 zip -s 0 split.zip --out unsplit.zip

bölünmüş bir arşivi tek dosyalı arşive dönüştürür.

(...)

Yani, ilk olarak ZIP dosyasını "-s 0" anahtarını kullanarak "ayırırsınız" :

$ zip -s 0 archive.zip --out unsplit.zip

... ve sonra unsplit dosyasını açın:

$ unzip unsplit.zip


6
tar -czvf - /path/to/files | split -b 10M - archive.tar.gz

Size bir dizi dosya verecektir:

archive.tar.gzaa

archive.tar.gzab

...

Hangi daha sonra ile sıkıştırılmamış olabilir:

cat archive.tar.* | tar -xzvf -

2

İşte 5GB'lık bir dosya için bunu yaptım (OP'nin istediği gibi 1GB'a 10MB'ye bölünmüş) ...

Örnek: Bir bölmek için 5GB dosya içine 1GB dosyaları bir FAT32 USB (dosya adı "FIVE_GB_FILE.ISO") kopyalamak için

1.Adım: Dosyayı sıkıştırın (sıkıştırma yok, kaynakla aynı dizin)

zip -0 FIVE_GB_FILE.ZIP FIVE_GB_FILE.ISO

2.Adım : 5GB zip dosyasını 1GB zip dosyalarına bölün

zip -s 1000m SPLIT_5GB_FILES FIVE_GB_FILE.ZIP

Voila ... aşağıdaki 1GB'lık dosyalara sahip olmalısınız (VE orijinal ve 1. adımdaki zip)

SPLIT_5GB_FILES.zip
SPLIT_5GB_FILES.Z01
SPLIT_5GB_FILES.Z02
SPLIT_5GB_FILES.Z03
SPLIT_5GB_FILES.Z04
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.