कई फाइलों को कई अभिलेखों में जिप करें


13

चल रहा है लिनक्स। मेरे पास लगभग 150 बड़ी सीएसवी फाइलों की निर्देशिका है; बस zip -9उन पर एक अखंड फ़ाइल में परिणाम होता है जो अभी भी बहुत बड़ा है। मैं यह चाहूंगा कि उन्हें बस 30-40 CSVs की चार या पाँच ज़िप फ़ाइलों में ज़िप करें; इस प्रकार अनुक्रमण या स्पान्ड जिप ऑर्डर एक समस्या नहीं होगी, क्योंकि प्रत्येक ज़िप स्वतंत्र है। ऐसा करने का एक सरल तरीका होना चाहिए। कोई सुझाव?

(और हाँ, ज़िप पसंदीदा प्रारूप है, यदि संभव हो तो)

जवाबों:


23

पर्याप्त स्विच नहीं है? आप फ़ाइल को अधिकतम आकार की फ़ाइलों में विभाजित करने के लिए जिप-एस का उपयोग कर सकते हैं, जैसे:

"ज़िप -s 300 मी <2 जीबी फ़ाइल>" का उत्पादन:

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)

फिर "अनज़िप फ़ाइल.ज़िप" सब कुछ एक साथ खोल देगा।


ज़िप का क्या संस्करण है ?? मुझे मिलता है file.z01 file.z02 ... file.zip और unzip file.zipसीधे काम नहीं करता है (मैं पहले उन्हें फिर से जोड़ने के लिए ज़िप -F का उपयोग करूंगा)। ध्यान दें कि ये "स्वतंत्र" नहीं हैं।
sourcejedi

1
@sourcejedi: इस उत्तर में ( superuser.com/a/602736/195224 ) कुछ और विस्तृत विवरण हैं।
मपी

@ मुझे पता है, मैंने अभी उस उत्तर को लिखा है :)।
sourcejedi

@ सोर्सजेडी: ओह हाँ, अब आप इसे कहते हैं ...;)
mpy

2

split इनपुट फ़ाइलों की सूची पर प्रयोग करें :-)।

(परीक्षण नहीं किया है, मैंने सफाई के लिए आरएम कमांड शामिल किए हैं, ध्यान रखें)।

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]

तुम क्यों प्रयोग करते हैं split -C( --line-bytes) और नहीं split -l( --lines)? एक संग्रह में कितनी CSV फाइलें हैं, इस संबंध में यह अधिक पूर्वानुमान योग्य होगा।
12

मैंने मैनपेज को बहुत तेज़ी से स्किम किया। धन्यवाद, मैं इसे ठीक कर दूँगा!
sourcejedi
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.