बस MacOS के बारे में टिप्पणी पर ध्यान दिया गया, और जब मुझे लगता है कि @akira (और pv) से समाधान बहुत अधिक है, तो मैंने सोचा कि मैं अपने मैकओएस बॉक्स में एक हच और एक त्वरित प्लेड टार के साथ पीछा करूंगा और इसे SIGINFO सिग्नल भेजूंगा। पर्याप्त रूप से, यह काम किया :) अगर आप बीएसडी जैसी प्रणाली पर हैं, तो यह काम करना चाहिए , लेकिन लिनक्स बॉक्स पर, आपको SIGUSR1 भेजने की आवश्यकता हो सकती है, और / या tar
उसी तरह काम नहीं कर सकता है।
नीचे की ओर यह है कि यह आपको केवल एक आउटपुट के साथ प्रदान करेगा (stdout पर) जो आपको दिखा रहा है कि वर्तमान फ़ाइल के माध्यम से कितनी दूर है क्योंकि मैं यह अनुमान लगा रहा हूं कि इसके बारे में कोई पता नहीं है कि यह डेटा स्ट्रीम कितनी बड़ी हो रही है।
तो हाँ, एक वैकल्पिक तरीका टार को फायर करना होगा और समय-समय पर इसे SIGINFOs को भेजना होगा जब तक आप यह जानना चाहते हैं कि यह कितनी दूर हो गया है। यह कैसे करना है?
तदर्थ, मैनुअल दृष्टिकोण
यदि आप एक तदर्थ आधार पर स्थिति की जांच करने में सक्षम होना चाहते हैं, तो आप control-T
संबंधित विंडो में हिट कर सकते हैं (जैसा कि ब्रायन स्विफ्ट का उल्लेख किया गया है) जो SIGINFO सिग्नल को भेज देगा। इसके साथ एक मुद्दा यह है कि मैं इसे आपकी पूरी श्रृंखला के लिए भेजूंगा, मेरा मानना है कि यदि आप कर रहे हैं:
% tar cvf - folder-with-big-files | bzip2 -c > big-files.tar.bz2
आपको bzip2 रिपोर्ट भी दिखाई देगी जो कि स्टेटस के साथ टार है:
a folder-with-big-files/big-file.imgload 0.79 cmd: bzip2 13325 running
14 0.27u 1.02s
adding folder-with-big-files/big-file.imgload (17760256 / 32311520)
यह अच्छी तरह से काम करता है अगर आप बस यह जांचना चाहते हैं कि tar
क्या आप चल रहे हैं तो अटक गया है, या बस धीमा है। आप शायद इस मामले में मुद्दों को प्रारूपित करने के बारे में बहुत ज्यादा चिंता करने की जरूरत नहीं है, क्योंकि यह केवल एक त्वरित जांच है।
स्वचालित दृष्टिकोण का प्रकार
यदि आप जानते हैं कि इसमें कुछ समय लगने वाला है, लेकिन प्रगति संकेतक की तरह कुछ करना चाहते हैं, तो एक विकल्प यह होगा कि आप अपने टार प्रोसेस को बंद कर दें और दूसरे टर्मिनल वर्क आउट में यह पीआईडी है और फिर इसे एक स्क्रिप्ट में फेंक दें जो कि बार-बार सिग्नल भेजता है। । उदाहरण के लिए, यदि आपके पास निम्नलिखित स्क्रिप्टलेट है (और इसे कहते हैं script.sh PID-to-signal interval-to-signal-at
):
#!/bin/sh
PID=$1
INTERVAL=$2
SIGNAL=29 # excuse the voodoo, bash gets the translation of SIGINFO,
# sh won't..
kill -0 $PID # invoke a quick check to see if the PID is present AND that
# you can access it..
echo "this process is $$, sending signal $SIGNAL to $PID every $INTERVAL s"
while [ $? -eq 0 ]; do
sleep $INTERVAL;
kill -$SIGNAL $PID; # The kill signalling must be the last statement
# or else the $? conditional test won't work
done
echo "PID $PID no longer accessible, tar finished?"
यदि आप इसे इस तरह से लागू करते हैं, क्योंकि आप केवल लक्ष्य कर रहे हैं tar
तो आपको इस तरह से अधिक आउटपुट मिलेगा
a folder-with-big-files/tinyfile.1
a folder-with-big-files/tinyfile.2
a folder-with-big-files/tinyfile.3
a folder-with-big-files/bigfile.1
adding folder-with-big-files/bigfile.1 (124612 / 94377241)
adding folder-with-big-files/bigfile.1 (723612 / 94377241)
...
जो मैं मानता हूँ, थोड़े सुंदर है।
अंतिम लेकिन कम से कम - मेरी स्क्रिप्टिंग थोड़े कठोर है, इसलिए यदि कोई भी अंदर जाना चाहता है और कोड को सुधारना / सुधारना / सुधारना चाहता है, तो अपने जीवन के लिए जाएं :)