ज़िप: तर्क सूची बहुत लंबी (कुल मिलाकर 80.000 फाइलें)


14

मुझे कई ज़िप फ़ाइलों में 80.000 फ़ाइलों को संपीड़ित करने की आवश्यकता है। यह वह कमांड है जिसका मैं उपयोग करता हूं:

zip -s 200M photos_test/*

हालाँकि मुझे निम्न त्रुटि मिलती है:

-bash: /usr/bin/zip: Argument list too long

फ़ोल्डर फ़ाइलों को मैन्युअल रूप से विभाजित करने के साथ, मैं समस्या को हल करने के लिए क्या कर सकता हूं?

धन्यवाद


त्रुटि -bash: /usr/bin/zip: Argument list too longका कारण हो सकता है: 1- -rस्विच का उपयोग नहीं करने के कारण , 2- संग्रह करने के लिए बहुत सारी फाइलें हैं। तो पहले मामले में @ मैट का जवाब सही है और दूसरे मामले में @ इग्नासियोविज़क्वेज़-अब्राम्स का जवाब सही है।
shgnInc

जवाबों:


14

यदि आप पूरी निर्देशिका चाहते हैं, तो आप बस -rस्विच का उपयोग कर सकते हैं :

zip -r -s 200M myzip photos_test

photos_testहालांकि इसमें सभी उपनिर्देशिका शामिल होंगी ।


मैंने वही किया है जो आप सुझाते हैं और मेरे पास एक छोटा myzip.zip (7mb) और खंड (200mb प्रत्येक) है। हालाँकि, मैं सामग्री को अनज़िप नहीं कर सकता, मैं unzip unix myzip.zip चला रहा हूँ, लेकिन मुझे "खराब जिप्फ़ाइल ऑफ़सेट (लेसेक) मिल रहा है"। इसके अलावा, मुझे उन्हें विंडोज वातावरण में भी निकालने की आवश्यकता है, और वहां मेरे पास केवल विंडोज 7 चिमटा है जो मुझे लगता है।
aeuryzm

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

9

समस्या "*" का विस्तार प्रतीत होती है। फ़ोल्डर नाम या "का उपयोग करें।":

यदि आप ज़िप के भीतर रूट फ़ोल्डर को शामिल करना चाहते हैं:

zip -r my.zip folder_with_80k_files

यदि आप ज़िप के अंदर रूट फ़ोल्डर को शामिल नहीं करना चाहते हैं:

cd folder_with_80k_files
zip -r my.zip .

5
find photos_test/ -mindepth 1 -maxdepth 1 | zip -@ -s 200M

3
find . -mindepth 1 -maxdepth -name '*.json' | zip {YOURZIPFILENAME}.zip -@यदि आपको विभाजित करने की आवश्यकता नहीं है, तो उपयोग करें और एक्सटेंशन द्वारा फ़ाइलों का चयन करना चाहते हैं।
डैनियल सोकोलोस्की

3

ls photos_test | zip -s 200M -@ photos

  • -@स्टड से फ़ाइलों की एक सूची पढ़ने के लिए ज़िप का कारण होगा
  • |इच्छा पाइप एक उत्पादन की lsमें इनपुट का zipआदेश

man zip:

USE
⋮
   -@ file lists.  If a file list is specified as -@ [Not on MacOS], zip takes
   the  list  of  input  files from standard input instead of from the command
   line.  For example,

          zip -@ foo

   will store the files listed one per line on stdin in foo.zip.

   Under Unix, this option can be used to powerful effect in conjunction  with
   the  find (1)  command.   For example, to archive all the C source files in
   the current directory and its subdirectories:

          find . -name "*.[ch]" -print | zip source -@

   (note that the pattern must be quoted to keep the shell from expanding it).
⋮
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.