मैं एक फ़ाइल को "कैट एंड फॉलो" कैसे करूँ?


31

एक फ़ाइल क्रमिक रूप से डाउनलोड की जा रही है wget

अगर मैं इसे अनपैक करना शुरू करता हूं cat myfile.tar.bz2 | tar -xj, तो यह सही ढंग से अनपैक हो सकता है या "अनपेक्षित ईओएफ" के साथ असफल हो सकता है, जो कि तेज है।

फ़ाइल को "कैट एंड फॉलो" कैसे करें, यानी फाइल का आउटपुट कंटेंट स्टडआउट करें, लेकिन ईओएफ पर बाहर न निकलें, इसके बजाय उस फाइल को सब्सक्राइब करके रखें और डेटा के नए भागों को आउटपुट जारी रखें, केवल तभी बाहर निकलें जब फाइल बंद हो। लेखक और एन सेकंड के भीतर फिर से नहीं खोला गया।


मैंने @ arielCo के उत्तर के आधार पर एक स्क्रिप्ट cat_and_follow बनाई है जो उस समय को भी समाप्त कर देती है जब फ़ाइल अब लिखने के लिए नहीं खोली जा रही है।tail


2
मुझे लगता है कि आप tailइसके अनुसरण विकल्प के साथ कमांड की तलाश कर रहे हैं ।
केशलम

tailबाइनरी फ़ाइलों के साथ भी काम करता है?
वि।

2
आपको यह भी पसंद आ सकता है less +F...
mikeserv

मुझे पता है कि आपको अपना समाधान मिल गया है, लेकिन मेरे पास एक सवाल है, बस क्यों न करें:wget ... && tar xjvf ...
जोसेफ आर।

@JosephR।, 1. समानांतर रूप से समय बचाने के लिए; 2. सिस्टम लोड को बढ़ाने के लिए भी (संसाधन-गहन पूर्ण थ्रॉटल अनपैकिंग चरण को टालना / कम करना); 3. बाद में "अनपैक" कमांड के बारे में याद रखने से बचें (या इसे शेड्यूल करना) या पहली जगह में जंजीर कमांड टाइप करना (जब मुझे अभी तक यकीन नहीं है कि मैं इसे अनपैक करना चाहता हूं)।
वि।

जवाबों:


22
tail +1f file

मैंने इसे wgetडाउनलोड करते समय LibreOffice source टारबॉल के साथ उबंटू पर परीक्षण किया :

tail +1f libreoffice-4.2.5.2.tar.xz | tar -tvJf -

यह मेरे एंड्रॉइड फोन में सोलारिस 10, आरएचईएल 3, एआईएक्स 5 और बिजीबॉक्स 1.22.1 पर भी काम करता है ( tail +1 -f fileबिजीबॉक्स के साथ उपयोग )।


1
क्या डाउनलोड समाप्त होने पर यह स्वचालित रूप से बाहर निकल जाएगा? मुझे उम्मीद है कि "अनुयायी" /proc/*/fd/समय-समय पर स्कैन करने और यह जांचने के लिए कि फ़ाइल अच्छे के लिए बंद है या नहीं।
वि।

2
मुझे उम्मीद नहीं थी कि tailबिनरे फाइलों के साथ काम करता है ...
Vi।

एक स्क्रिप्ट बनाई जो स्कैनिंग /proc/../fd और ऑटो-टर्मिनेशन करती है।
वि।

1
आपको GNU टेल की आवश्यकता नहीं है, मेरा मानना ​​है कि -fविकल्प मानक है। हालाँकि, डाउनलोड समाप्त होने पर यह स्वचालित रूप से समाप्त नहीं होगा।
बरमार

4
उबंटू में tail +1fकाम नहीं करता है। आपको करना होगाtail -n +1
dangonfast

11

समस्या यह है कि catफाइल अभी भी संलग्न है कि पता नहीं है। जैसे ही catफ़ाइल से बाहर निकलता है (वर्तमान) उसका सामना होता है।

इससे wgetबचने के लिए आपको एक पाइप (या फीफो) को लिखना होगा।

wget -O - http://... | tar -xjf -

7
या curl, जो डिफ़ॉल्ट रूप से stdout को आउटपुट करता है। और (1) -f -निरर्थक है, tarडिफ़ॉल्ट रूप से स्टड से पढ़ता है, और (2) अधिकांश tarएस स्वचालित रूप से संपीड़न का पता लगा सकता है, इसलिए jयह अक्सर अनावश्यक होता है। curl http://... | tar x
केविन

2
यह अनपैक की गई फाइल को सेव किए बिना डाउनलोड हो जाएगा। इसके अलावा यह खराब नेटवर्क के मामले में डाउनलोड को जारी रखने में बाधा होगी।
वि।

3
@Vi। आप teeइस तरह का उपयोग करके फ़ाइल को बचा सकते हैं : curl http://… | tee ….tbz | tar -xjलेकिन डाउनलोड को फिर से शुरू करने की तुलना में अधिक जटिल हो जाता है।
कैस्परल्ड

5

बाधित होने तक शुरुआत से एक फ़ाइल पढ़ने और उसका पालन करने के लिए :

tail -fn +1 file

यह प्रदर्शित करने के लिए, इसे आज़माएं (GNU Coreutils के साथ बैश मानते हुए):

(while true; do printf . >> /tmp/file; sleep 1; done)&
tail -fn +1 /tmp/file  # (Ctrl-C to interrupt, of course, or otherwise kill it.)
kill %  # Kills the while-loop.

(नोट: +1fअन्य लोगों द्वारा उल्लिखित फ़ाइल नाम के रूप में व्याख्या की गई है, कम से कम GNU tailकमांड में।)

ऊपर एकल फ़ाइल के लिए काम करता है। कई फाइलों का कॉन्टैक्नेशन उन सभी को निर्धारित करने में सक्षम नहीं होगा, जो पहली बार में लटकाए बिना। केवल अंतिम फ़ाइल के बाद, ' कैट एंड फॉलो ' के लिए, कोई प्रक्रिया प्रतिस्थापन का उपयोग कर सकता है । यहाँ एक और प्रदर्शन है:

printf file1 > /tmp/file1; printf file2 > /tmp/file2
(while true; do printf . | tee -a /tmp/file{1,2} > /dev/null; sleep 1; done)&
cat /tmp/file1 <(tail -fn +1 /tmp/file2)  # (Interrupt or kill it.)
kill %  # Kills the while-loop.

यह मेरे लिए काम tail +1f fileनहीं कर रहा था।
उपचारित जूल

यह उत्तर tail +1fअन्य विकल्पों के साथ संयोजन करते समय बहुत बेहतर है जैसे कि--pid
जोसेफ के। स्ट्रॉस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.