Birçok dosyayı çeşitli arşivlere sıkıştırın


13

Linux çalışıyor. Yaklaşık 150 büyük CSV dosyası içeren bir dizin var; sadece zip -9üzerinde bir şey yapmak hala çok büyük monolitik bir dosya ile sonuçlanır. Onları her biri 30-40 CSV'luk dört veya beş zip dosyasında sıkıştırmak istiyorum; Bu şekilde, her zip bağımsız olduğu için sıralama veya yayılmış zip sırası bir sorun oluşturmaz. Bunu yapmanın basit bir yolu olmalı. Herhangi bir öneri?

(ve evet, zip, mümkünse tercih edilen biçimdir)

Yanıtlar:


23

-S anahtarı yeterli değil mi? Dosyayı maksimum boyuttaki dosyalara bölmek için zip -s kullanabilirsiniz, örneğin:

"zip -s 300m <2 gb file>" üretir:

file.zip (300 mb, master file)
file.001.zip (300 mb)
file.002.zip (300 mb)
file.003.zip (300 mb)
file.004.zip (300 mb)
file.005.zip (300 mb)
file.006.zip (200 mb)

Sonra "unzip file.zip" her şeyi birlikte açacaktır.


Hangi zip sürümü bu ?? Doğrudan alıyorum file.z01 file.z02 ... file.zip ve unzip file.zipçalışmıyor (önce onları yeniden birleştirmek için zip -F kullanırdım). Bunların istendiği gibi "bağımsız" olmadığını unutmayın.
sourcejedi

1
@sourcejedi: Bu cevapta ( superuser.com/a/602736/195224 ) daha ayrıntılı açıklamalar bulunmaktadır.
mpy

@mpy biliyorum, bu cevabı az önce yazdım :).
sourcejedi

@sourcejedi: Ah evet, şimdi söylüyorsun ...;)
mpy

2

split Girdi dosyaları listesinde kullanın :-).

(Test edilmedi, temizlik için rm komutları ekledim, dikkat edin).

ls *.csv > csvfiles
split -d -l30 - csvfiles < csvfiles
for i in csvfiles[0-9][0-9]; do
  zip "$i.zip" -@ < "$i"
done

rm csvfiles
rm csvfiles[0-9][0-9]

Neden split -C( --line-bytes) değil split -l( --lines) kullanıyorsunuz? Bu, bir arşivde kaç CSV dosyasının bulunduğuna bağlı olarak daha öngörülebilir olurdu.
mpy

Manpage'i çok çabuk gözden kaçırdım. Teşekkürler, düzeltirim!
sourcejedi
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.