ज़िप पुरालेख फाइलों की सीमित संख्या के साथ


12

zipफ़ाइल संख्या सीमा के साथ s बनाने के लिए मैं किस कमांड का उपयोग कर सकता हूं ? मेरे पास एक फ़ोल्डर (कोई सबफ़ोल्डर) नहीं है, कहते हैं, 5000 फाइलें, इसलिए मैं एक कमांड चाहता हूं जो उस संख्या को विभाजित कर सके और 10 व्यक्तिगत zipअभिलेखागार बना सके , जिनमें से प्रत्येक में 500 से अधिक फाइलें नहीं होंगी।

मैं यह भी नहीं चाहता कि परिणामी 10 zipफाइलें एक-दूसरे से जुड़ी हों, ताकि मैं उन्हें व्यक्तिगत रूप से खोल सकूं और एक ही समय में सभी 10 खोलने की आवश्यकता नहीं होगी।

जवाबों:


13

आप GNU का उपयोग समानांतर रूप से कर सकते हैं क्योंकि यह तत्वों की संख्या को एक नौकरी तक सीमित कर सकता है और साथ ही एक जॉब नंबर (एक अद्वितीय ज़िप संग्रह नाम के लिए) प्रदान कर सकता है:

$ touch $(seq 20)
$ find . ! -name "*.zip" -type f -print0 | parallel -0 -N 5 zip arch{#} {}
  adding: 1 (stored 0%)
  adding: 10 (stored 0%)
  adding: 11 (stored 0%)
  adding: 12 (stored 0%)
  adding: 13 (stored 0%)
  adding: 14 (stored 0%)
  adding: 15 (stored 0%)
  adding: 16 (stored 0%)
  adding: 17 (stored 0%)
  adding: 18 (stored 0%)
  adding: 19 (stored 0%)
  adding: 2 (stored 0%)
  adding: 20 (stored 0%)
  adding: 3 (stored 0%)
  adding: 4 (stored 0%)
  adding: 5 (stored 0%)
  adding: 6 (stored 0%)
  adding: 7 (stored 0%)
  adding: 8 (stored 0%)
  adding: 9 (stored 0%)
$ ls
1   11  13  15  17  19  20  4  6  8  arch1.zip  arch3.zip
10  12  14  16  18  2   3   5  7  9  arch2.zip  arch4.zip

विकल्प -N 5फ़ाइलों की संख्या को 5 प्रति संग्रह तक सीमित करता है और इसके zipस्थान पर प्रस्तुत किया जाता है{}

{#}(शब्दशः, मंगलाचरण के दौरान आप के द्वारा प्रतिस्थापित किया जा करने के लिए नहीं), नौकरी संख्या से बदल दिया जाता है, जिसके परिणामस्वरूप arch1.zip, arch2.zipआदि

-print0करने के लिए विकल्प findऔर -0करने के लिए विकल्प parallelसंगठनों ने मिलकर यह सुनिश्चित करें कि विशेष वर्ण के साथ फ़ाइल नाम सही ढंग से नियंत्रित किया जाता है बनाते हैं।


मुझे यह त्रुटि मिली: i.imgur.com/JoyPrfY.png इस आदेश से: खोजो *! -नाम "* .zip" -type f -print0 | समानांतर -0-एन 500 ज़िप आर्क {13} {}
user8547

@ user8547 जो GNU समांतर नहीं है, लेकिन समांतर अधिकरणों में शामिल है, आप नवीनतम सुरक्षा पैच प्राप्त करने के लिए स्रोत से सर्वश्रेष्ठ संकलन और संस्थापित करते हैं। ftp.gnu.org/gnu/parallel/parallel-latest.tar.bz2
एंथन

2
@ user8547 नहीं, बस चलाएं sudo apt-get install parallel
terdon

2
@ user8547 क्यों arch{13}? आपको वास्तव में #चरित्र का उपयोग करने की आवश्यकता है । आप किस खोल का उपयोग कर रहे हैं?
एंथन

2
@ user8547 नहीं, नौकरी का नंबर लगाने के लिए समानांतर बताने का कोई तरीका नहीं है, खुशी है कि इसने काम किया।
एंथन

1

शेल-ओनली ऑप्शन: COUNT फ़ाइलों की प्रक्रिया बैच के माध्यम से "${@:START:COUNT}"(स्थितीय मापदंडों की श्रेणी) और अभिलेखागार को नाम देने के लिए shift COUNTएक काउंटर बढ़ाते समय c:

सेट -- *
ग = 1
जबकि ($ #); करना
  अगर [$ # -ge COUNT ]; फिर
    ज़िप $ {c}। ज़िप "$ {@: 1: COUNT }"
    ग = $ ((ग + 1))COUNT 
    शिफ्ट करें
  अन्य
    ज़िप $ {c} .झिप "$ {@}"
    शिफ्ट $ #
  फाई
किया हुआ

1

स्वीकृत जवाब मेरे लिए पूरी तरह से ठीक है। :) लेकिन, यदि आपके पास समानांतर (जो जानता है क्यों) तक पहुंच नहीं है, तो यहां एक विकल्प है जो मैं पहले भी आया था:

find . ! -name '*.zip' -type f | xargs -n 500 | awk '{system("zip myarch"NR".zip "$0)}'

जो myarch1.zip, myarch2.zip, myarch3.zip आदि का निर्माण करेगा। आप अजीब चाल का नाम रखने पर सुझाए गए -0 चाल एंथन का उपयोग करना चाह सकते हैं।

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