जब मैं ज़िप का उपयोग करता हूं, तो कमांड लाइन को बाढ़ किए बिना मैं समग्र प्रगति कैसे प्रदर्शित कर सकता हूं?


25

एक निश्चित-लंबाई प्रगति बार, एक फ़ाइल या बाइट काउंट, या बेहतर अभी तक एक टाइमर जो अनुमानित समय शेष है, आदर्श होगा।

zipऐसा लगता है कि मानक व्यवहार संसाधित होने वाली प्रत्येक फ़ाइल के लिए एक पंक्ति मुद्रित करता है, लेकिन जब मैं हजारों फ़ाइलों को ज़िप करता हूं तो मुझे वह जानकारी अधिभार नहीं चाहिए। मैं एक अनुमान लगाना चाहता हूं कि इसमें कितना समय लगेगा।

मैंने कोशिश की -q( --quiet) के साथ संयोजन में विकल्प -dg( --display-globaldots), लेकिन है कि बस बाढ़ डॉट्स के कई पंक्तियों के साथ stdout और कोई उपयोगी संकेत देता है।

-qdgds 10mमैन पेज में बताए अनुसार मैंने भी कोशिश की , लेकिन वही परिणाम मिला।

मैंने तब -db( --display-bytes) और -dc( --display-counts) की कोशिश की, लेकिन यह एक वैश्विक विकल्प नहीं लगता है, इसलिए यह फिर से हर फ़ाइलनाम के लिए प्रिंट करता है।

अंत में, मैंने इसे एक साथ -qपसंद करने की कोशिश की -qdbdc, लेकिन यह सिर्फ कुछ भी नहीं करता है।

मजेदार रूप से पर्याप्त है, मुझे जानकारी-ज़िप साइट पर एक आदमी पृष्ठ मिला जिसमें उल्लेख किया गया है कि एक -de( --display-est-to-go) विकल्प का उपयोग करना चाहिए जो "संग्रह संचालन समाप्त करने के लिए समय का अनुमान प्रदर्शित करता है।"

यह वही लगता है जो मैं चाहता हूं, लेकिन समस्या यह है कि मेरे संस्करण में zipवह विशेषता नहीं है। मैं Ubuntu 14.04.1 64bit, bash-4.3.30 (1) और zip-3.00 का उपयोग कर रहा हूं। विकिपीडिया के अनुसार, यह जिप की नवीनतम स्थिर रिलीज है।

जानकारी ज़िप स्रोत पृष्ठ पर अप्रकाशित बीटा संस्करण हैं, लेकिन मैं अपने डेटा को बीटा रिलीज़ के लिए नहीं सौंपूंगा।


फ़ाइल में आउटपुट लॉग करें और इसका उपयोग उच्च स्तर की जानकारी प्रदान करने के लिए करें tee। ज़िप शुरू करने से पहले, फ़ाइलों की कुल गिनती ( lsया के साथ find -type f) करें और यह ज़िप करते समय, पहले से ही संसाधित फ़ाइलों की संख्या के लिए लॉग फ़ाइल पढ़ें ( grepसही लाइनों को देखने के wc -lलिए और लाइनों के लिए) गिनती), इसलिए आपकी उच्च स्तरीय जानकारी "234/76438 संसाधित फ़ाइलों" की तरह कुछ दिखाएगी;
कुंभ राशि विद्युत

आप कुल फ़ाइलों के आकार पर विचार करके और पहले से संसाधित किए गए लोगों के आकार की जांच करके समय पर काम कर सकते हैं; लेकिन ... यहां तक ​​कि एक ही आकार वाली फाइलें भी संसाधित होने में अलग-अलग समय लेती हैं, इसलिए यह हमेशा एक जंगली अनुमान होगा ...
कुंभ राशि

मुझे नहीं पता कि क्या आप ज़िप फाइल बनाते समय स्टड का उपयोग कर सकते हैं, लेकिन अगर pv /path/to/file | gzip > /path/to/file.gz
गज़िप

जवाबों:


11

zipमानक आउटपुट के लिए डेटा को संपीड़ित कर सकता है। इसलिए, आप इसे अन्य उपकरणों के साथ जोड़ सकते हैं जैसे pv:

zip -qr - [folder] | pv -bep -s $(du -bs [folder] | awk '{print $1}') > [file.zip]

-bepअपनी सुविधा में से किसी एक विकल्प को हटा दें ।


इसके लिए धन्यवाद! मैं अपने मैक पर ऐसा करता हूं (काढ़ा स्थापित पी.वी., काढ़ा स्थापित कोरुटिल्स, और डु को गुड्डू के साथ बदलें)।
जेफ

6

यदि आप 7z का उपयोग करके ठीक हैं:

7z a output.zip folder/

यह आपको इस तरह एक प्रगति बार देगा:

Open archive: test.zip
--
Path = test.zip
Type = zip
Physical Size = 232039663

Scanning the drive:
3 folders, 2401 files, 238122225 bytes (228 MiB)

Updating archive: test.zip

Items to compress: 2404

 16% 279 U folder/file.txt  

2

मैंने निम्नलिखित का सफलतापूर्वक उपयोग किया है:

zip -r [target_zip] [folder_to_zip] 2>&1 | 
pv -lep -s $(ls -Rl1 [folder_to_zip] | egrep -c '^[-/]') > /dev/null

और यह नीचे समझाया गया है:

zip -r [target_zip] [folder_to_zip] 2> & 1 |

[लक्ष्य_ज़िप] में पुन: ज़िप करें [फ़ोल्डर_टो_ज़िप] फ़ाइल को stdout में पुनर्निर्देशित करने के लिए। ध्यान दें, उस stderr में प्रत्येक फ़ाइल और निर्देशिका के लिए एक लाइन होगी ।

pv -lep -s $ (ls -Ral1 [folder_to_zip] | egrep -c '^ [- /]')> / dev / null

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

पुनरावर्ती सूची (ls) [folder_to_zip] और '-' या 'd' अर्थात सभी फाइलों और निर्देशिकाओं से शुरू होने वाली पंक्तियों की गिनती (याद निर्देशिकाओं को '/' से शुरू करते हुए) गिनने के लिए उम्मीद की गई कुल पंक्तियों का कुल आकार इकट्ठा होता है ।

उपरोक्त पूरा होने का सटीक प्रतिशत प्रदान करता है क्योंकि सभी फाइलों और निर्देशिकाओं को संसाधित किए जाने पर 100% तक पहुंच जाती है।

पेड्रोपरो के उत्तर के साथ समस्या यह है कि प्रगति की गणना प्रक्रिया (असम्पीडित) की कुल संख्या पर बाइट्स की संख्या (संपीड़ित) से की जाती है। परिणामस्वरूप प्रक्रिया लगभग 30% (संपीड़न दर के आधार पर) पर पूरी होगी।

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