लिनक्स कमांड - शो प्रगति


24

मैं सोच रहा था कि क्या किसी तरह की प्रगति जानकारी प्रदर्शित करने का कोई तरीका है जब लिनक्स में फ़ाइलों का उपयोग करके खोज की जाए find। मैं अक्सर अपने आप को एक बड़ी डिस्क पर फ़ाइलों की खोज करता हूं और कुछ प्रकार के प्रगति संकेतक बहुत सहायक होंगे, जैसे बार या कम से कम वर्तमान निर्देशिका "खोज" में। क्या कोई स्क्रिप्ट है जो ऐसा करती है, या findकुछ हुक का समर्थन करती है। ?


उत्तर के लिए धन्यवाद, मैं सभी समाधानों की जाँच करूँगा और निर्णय लिया कि कौन सा बेहतर है। अगर यह मेरे ऊपर होता तो मैं सभी उत्तरों को स्वीकार कर लेता।
व्लाद बामोस

इस पर निर्भर करता है कि आप किस खोज मापदंड का उपयोग कर रहे हैं, यह पता लगाने की तुलना में बहुत अधिक तेज़ है
B14D3

जवाबों:


28

इस ट्रिक से आप करंट फोल्डर को देख सकते हैं - लेकिन नो प्रोग्रेस बार - सॉरी।

 watch readlink -f /proc/$(pidof find)/cwd

यह अच्छा है। ध्यान दिया जाना चाहिए कि cwd तक पहुँचने के लिए आपको सुपरसुसर विशेषाधिकारों की आवश्यकता है। धन्यवाद!
व्लाद बामोस

अच्छी तरह से काम।
जेसी ग्लिक

8

Pv (पाइप दर्शक) नामक एक छोटी सी उपयोगिता मदद कर सकती है। से शानदार सारांश Peteris Krumins द्वारा:

पाइप दर्शक एक पाइपलाइन के माध्यम से डेटा की प्रगति की निगरानी के लिए एक टर्मिनल-आधारित उपकरण है।

आप कई तरीकों से pv का उपयोग कर सकते हैं। जब इधर-उधर खेल रहा होता है, तो मैं इसे पाईप द्वारा तुरंत उत्पन्न आउटपुट की प्रगति की निगरानी के लिए डाल देता हूं (स्टडआउट स्टडआउट को पास करना चाहिए)

find / -mtime -1h | pv > /dev/null

जो आउटपुट को इस तरह दिखाएगा:

6.42MB 0:01:25 [31.7kB/s] [         <=>      ]

(मैं रीडायरेक्ट स्टडआउट / देव / अशक्त करता हूं ताकि मैं आउटपुट फ्लाइंग के बिना एक्शन में प्रगति बार देख सकूं। यह संभवतः आपके इरादे को खोजने के साथ नहीं है, इसलिए तदनुसार दर्जी)

मुझे पूरा यकीन नहीं है कि यह जंगली में कितना अच्छा काम करता है। "महंगी" के लिए ऊपर वाला (रूट से ट्रैवर्सिंग) जैसा लगता है, यह काफी अच्छी तरह से काम करता दिखाई दिया। डायरेक्ट्री ट्री में डीप नोड में सरल कमांड के लिए, pv बुरी तरह से विफल रहा। ये आदेश तुरंत परिणाम लौटा रहे हैं, इसलिए एक प्रगति पट्टी शायद यहां मूट है।

किसी भी दर पर, चारों ओर खेलें और देखें कि क्या यह आपके लिए आवश्यक है। विचार के लिए भोजन, कम से कम।


वह प्रगति बार क्या दिखाएगा? न तो find, और न ही pvयह पता है कि खोज में कितना समय लगेगा, इसलिए वे प्रतिशत की गणना नहीं कर सकते। pvआउटपुट में हम सभी देख सकते हैं कि खोज शुरू होने के बाद का समय है।
मनिएव

यह सही है। मैंने सोचा था कि कहीं न कहीं कोई जादू चल रहा है, जिसने पी.वी. को डायरेक्टरी ट्रैवर्सल (जो गलत है) की प्रगति की जांच करने की अनुमति दी है। एक स्थिर दर पर मानक इनपुट को देखते हुए, pv बस एक स्थिर आवृत्ति पर प्रगति बार को स्थानांतरित करता है। yes | pv > /dev/nullअवलोकन करने की कोशिश करें
tcdyl

1
एक अच्छी उपयोगिता के लिए +1
व्लाद बामोस

प्रगति को देखते हुए गैर तुच्छ है। वेब ब्राउज़र लोड करने वाले पेज भी नहीं कर पा रहे हैं। मुझे लगता है कि आप उन फ़ाइल सामग्री के लिए अनुमान लगा सकते हैं, जिन्हें आप फ़ाइल के आकार से विभाजित कर सकते हैं, लेकिन यूनिक्स धाराओं के लिए आपको नहीं पता है कि डेटा की कुल मात्रा आमतौर पर है, और यह उपकरण किसी भी तरह के स्ट्रीम डेटा के लिए लचीला है, न कि केवल फ़ाइलों के लिए।
श्रीधर सरनोबत १६'१६ को

7

मैंने आज इसके लिए खोज की और Google के माध्यम से यहां पहुंचा। मेरे पास एक लंबे समय तक चलने वाला ओएस एक्स और जाहिरा तौर पर चल रहा था, watchवहां मौजूद नहीं है। तो यहाँ एक और उपाय है:

lsof -Fn -a -c find -d cwd +r 10

  • lsof = खुली फाइलों की सूची
  • -Fn= बस फ़ाइल / निर्देशिका का नाम दिखाएं ('n' वर्ण के साथ उपसर्ग करें, पूर्ण lsofउत्पादन पसंद करने पर इसे छोड़ दें
  • -a= सभी मापदंडों से lsofमेल खाने वाली लाइनों को दिखाने के लिए कहें (डिफ़ॉल्ट रूप से यह किसी भी मापदंड से मेल खाती लाइनें दिखाता है)
  • -c find= शो की गई प्रक्रिया द्वारा खोली गई फाइलें / निर्देशिकाएं find(वास्तव में, प्रक्रिया जिसका नाम से शुरू होता है find, लेकिन यह केस-संवेदी है, इसलिए Finderदिखाई नहीं देगी)
  • -d cwd = एफडी (फ़ेसस्क्रिप्ट) के साथ लाइनें दिखाएँ
  • +r 10 = हर 10 सेकंड में आउटपुट दिखाएं जब तक कोई खुली फाइल नहीं मिलती (खोज समाप्त होती है)

यह दिखाएगा कि निर्देशिका findहर 10 सेकंड में प्रसंस्करण कर रही है, इसलिए यह विचार करना चाहिए कि findक्या अभी भी काम कर रहा है और कितनी दूर तक प्रगति की है।


5

में समानांतर खोजों का एक उदाहरण findहै man find। इसका उपयोग करते हुए, आप प्रत्येक आइटम के लिए कई जांच कर सकते हैं, जो कई शर्तों के आधार पर कार्य कर रहा है। पहला चेक, उदाहरण के लिए, सरल हो सकता है -print, इसलिए सभी नाम stdout में मुद्रित किए जाते हैं। दूसरी जांच वह करेगी जो आप चाहते हैं। कुछ इस तरह:

find /work \( -fprint /dev/stderr \) , \( -name 'core' -exec rm {} \; \)

यदि दूसरे चेक में फ़ाइल नाम भी प्रदर्शित होने चाहिए, तो आप उनमें से किसी एक का उपयोग करके stderr पर पुनर्निर्देशित कर सकते हैं -fprint /dev/stderr


मैंने इसका परीक्षण नहीं किया है लेकिन मुझे लगता है कि यह सही तरीका है।
रॉल्फ

2

AFAIK, यह नहीं है, और इसे लागू करने के nontrivial होगा।

... हम्म। शायद एक स्क्रिप्ट find <target dir> -type dपहले चल रही है , सूची को संग्रहीत करना और फिर find <list item> -maxdepth 1 <rest of find parameters>लूप के लिए एक चलाने से पहले प्रत्येक डायर को गूंजना ।

ध्यान दें कि आप बदले में प्रदर्शन करने में सक्षम होने के लिए प्रदर्शन का / महत्वपूर्ण / नुकसान कर रहे हैं कि यह क्या कर रहा है।


1

यह खोज द्वारा खोली गई वर्तमान फ़ाइलों की एक सूची है , इसलिए यह वही है जो खोज अभी देख रही है।

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

# watch -n 1 'ls -l /proc/$(pidof find)/fd | cut -d ">" -f 2 | grep -v /dev/'

grep -v /dev/छिपाने फ़ाइलों को STDOUT, STDIN और STDERR, कि प्राप्त करते हैं और अपने कंसोल पर डेटा मुद्रित करने के लिए उपयोग की गई फ़ाइलों हो रहा है।

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