क्या कम कमांड को गतिशील रूप से ताज़ा करने का एक तरीका है?


141

मुझे watchकमांड पसंद है , लेकिन इसकी सीमाएं हैं

मैं जानना चाहता हूँ कि क्या मैं की कार्यक्षमता की नकल कर सकता है उत्सुक हूँ watchके साथ less। मैं मुख्य रूप से अपनी निर्देशिका के माध्यम से स्क्रॉल करने की क्षमता की तलाश कर रहा हूं क्योंकि यह गतिशील रूप से एक रनिंग स्क्रिप्ट के माध्यम से संशोधित हो जाता है।


मैं देख रहा हूँ tail -f foo.log | grep bar, और पूंछ / grep पाइपलाइन को पुनः आरंभ करने के साथ grep कमांड को गतिशील रूप से बदलने में सक्षम होने के लिए।
अलेक्जेंडर मिल्स

जवाबों:


119

में less, आप Fकिसी फ़ाइल के अंत में रीडिंग रखने के लिए टाइप कर सकते हैं (जैसे tail -f); आप :eकिसी भिन्न फ़ाइल को देखने के लिए टाइप कर सकते हैं और एक फ़ाइल का नाम, लेकिन दुर्भाग्य से, यदि आप वर्तमान फ़ाइल का नाम दर्ज करते हैं, तो फ़ाइल को lessपुनः लोड नहीं करता है। हालाँकि, इसे बनाने के लिए एक चाल है जिसे वर्तमान फ़ाइल को फिर से पढ़ना है, जिसे sabgenton द्वारा सुझाया गया है : टाइप करें :eऔर गैर-मौजूद फ़ाइल का नाम दर्ज करें ; जो त्रुटि संदेश प्रदर्शित करने के लिए कम होता है और फिर वर्तमान फ़ाइल को पुनः लोड करता है।

यदि आप इसके विकल्प की तलाश कर रहे हैं watch ls, तो यहां कुछ हैं:

  • आधुनिक फ़ाइल प्रबंधक (जैसे Nautilus, Thunar, Konqueror, Dolphin, Finder) वास्तविक समय में विचारों को ताज़ा करते हैं।
  • Emacs में रियल-टाइम रिफ्रेश नहीं होता है, लेकिन इसके साथ auto-revert-mode, यह हर 5 सेकंड में फाइल या डायरेक्टरी को फिर से लोड करेगा (देरी कॉन्फ़िगर करने योग्य है)।
  • हालाँकि w3m मुख्य रूप से एक वेब ब्राउज़र है, यह एक निष्क्रिय निर्देशिका और पाठ फ़ाइल दर्शक बनाता है। R(स्थानीय) URL पुनः लोड करने के लिए दबाएँ ।

6
मेरे लिए: e randomnamejkdlfjldf गैर-मौजूद फ़ाइल नाम को लोड करने में विफल रहता है, फिर वर्तमान फ़ाइल पर वापस लोड होता है: D
sabgenton

1
@sabgenton धन्यवाद, मुझे नहीं पता था कि। यह एक महान चाल है। मैंने इसे अपने उत्तर में जोड़ा, लेकिन आप इसे अपने स्वयं के उत्तर के रूप में पोस्ट कर सकते हैं (मुझे उम्मीद है कि जैद स्वीकार करेंगे)।
गाइल्स

1
@CMCDragonkai नहीं, less +Fकेवल संलग्न सामग्री के लिए देखता है। :e nonexistentfileपूरी तरह से बदले गए इनपुट को फिर से पढ़ने के लिए उपयोग करें ।
गाइल्स

1
क्या उसके लिए कमांड लाइन का झंडा है?
CMCDragonkai

3
@PaWWagland नहीं, Rमज़बूती से फ़ाइल को ताज़ा नहीं करता है। यह स्क्रीन को रीफ्रेश करता है, और कुछ इनपुट बफ़र्स को मिटा देता है, लेकिन यह वास्तव में सभी परिस्थितियों में फ़ाइल से डेटा को फिर से लोड नहीं करता है (केवल अगर फ़ाइल बड़ी है? मैंने कोड में गहराई से खुदाई नहीं की)।
गाइल्स

65

Shift+Fके lessसमान बना देगा tailf। यानी अगर फाइल में ज्यादा डेटा डाला जाता है तो यह रिफ्रेश हो जाता है।


7
ध्यान दें कि यह केवल एपेंड के लिए काम करता है। यदि लाइनों को हटा दिया जाता है या इन-प्लेस संपादित किया जाता है, lessतो वे परिवर्तन नहीं दिखाएंगे।
नथानिएल एम। बेवर

मैं निम्नलिखित मोड को कैसे रोकूं और स्क्रॉल करने योग्य मोड को फिर से दर्ज करूं?
टॉम हेल

1
<kbd> Ctrl + C </ kbd>
balki

1
बाल्की मेरा अनुभव है कि यह कमांड पाइपिंग को मारता है यदि आप उपयोग कर रहे हैं $COMMAND | less। मुझे आश्चर्य है कि क्या इस के आसपास एक अच्छा तरीका है? आप सामान पसंद कर सकते हैं $COMMAND > /tmp/file & less /tmp/fileलेकिन यह बहुत अच्छा नहीं है।
आरएच जूल

@AttRigh मैंने कभी भी अपनी कमांड को नहीं मारा (हालाँकि मैं रनिंग कमांड के लॉग्स को इस तरह पढ़ता हूं, मैं तकनीकी रूप से कम पाइप नहीं करता हूं)
जेना

41

बस प्रकार:

less +F filename

यह संपादक के भीतर "एफ" दबाने का अनुकरण करता है।


1
धन्यवाद; alias check="less +F"मेरे साथ उपनाम जोड़ा .bashrc
ल्यूक डेविस

22

manपृष्ठ बहुत जानकारीपूर्ण हो सकते हैं। उनके द्वारा भयभीत न हों। बाकी सब चीजों के अलावा, man lessआप Rकमांड का उपयोग कर सकते हैं :

   R      Repaint the screen, discarding any buffered input.  Useful if the file is changing while it is being viewed.

(मुझे पता है कि यह सवाल 6 साल से अधिक पुराना है, लेकिन यह Google खोजों पर आता है, इसलिए मैं केवल एक ही नहीं हूं जिसने यहां पहुंचने के लिए लिंक पर क्लिक किया है।)


7
किसी अन्य प्रोग्राम से आउटपुट द्वारा बाधित होने की स्थिति में यह स्क्रीन को पुन: प्रदर्शित करता है। यह फ़ाइल को लगातार लोड नहीं करता है। मैंने कोड में गहराई से नहीं देखा है कि यह क्या करता है, प्रयोगात्मक रूप से छोटी फ़ाइलों को फिर से लोड नहीं किया जाता है। मैं निश्चित रूप से मैन पेजों से भयभीत नहीं हूं और मैं कहता हूं कि यह विवरण खराब तरीके से लिखा गया है: "रिपेंट" यह नहीं बताता है कि इनपुट फिर से पढ़ा गया है, और वास्तविक व्यवहार काफी फिट नहीं है "उपयोगी अगर फ़ाइल बदल रही है" (शायद यह एक है बग? मुझे नहीं पता, क्योंकि मुझे नहीं पता कि कमांड क्या करने वाला है) ..
गाइल्स

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

मेरे लिए ठीक काम करता है, यहां तक ​​कि जब फ़ाइलों का उपयोग करते हुए 3 बाइट्स लंबा। मैं कल्पना नहीं कर सकता कि यह बड़ी फ़ाइलों के लिए भी काम क्यों नहीं करेगा।
Addison

1
महान! मेरे लिए यह छोटी और लंबी दोनों फाइलों के लिए काम करता है। मैंने सिर्फ दो संभावित समस्याओं पर ध्यान दिया: 1. lessफ़ाइल को उसके फ़ाइलनाम का उपयोग करके फिर से खोलना नहीं था - यानी जब फ़ाइल का इनोड बदल गया (जैसे कि फ़ाइल का उपयोग करते हुए ओवरराइट करना mv) तब पुरानी फ़ाइल सामग्री रुकी (शायद पुराना इनोड फिर से शुरू हुआ था) - - 2. पहली प्रदर्शित लाइन संभवतः मूल बाइट सामग्री की तरह ही बाइट ऑफसेट पर शुरू होती है। इसलिए जब लाइन की लंबाई बदलती है तो पहली प्रदर्शित लाइन अधूरी हो सकती है और प्रदर्शित लाइनें ऊपर / नीचे जा सकती हैं।
पाबौक

Rहमेशा काम नहीं करता। देखें unix.stackexchange.com/questions/4351/…
wisbucky

5

दौड़ते समय "F" कुंजी lessसमान के समान "अनुसरण" करेगी tail -f, लेकिन मुझे यकीन नहीं है कि यदि आप यहां खोज रहे हैं तो वह क्या हासिल करेगा।


5

मैं आम तौर Gपर एक-बार के आधार पर आउटपुट को पूंछने के लिए टाइप करता हूं । मुझे यह विशेष रूप से CIFS की तरह आ नेटवर्क फाइल सिस्टम पर मददगार लगता है।


यह कम के साथ खोली गई फ़ाइल की ऑन-डिमांड रिफ्रेश का अधिक है। फ़ाइल के अंत में कूदने के अलावा, यह फ़ाइल को फिर से लोड करता है यदि यह बदल गया है।
जॉर्ब

1
धन्यवाद। पहली बार यह मेरे लिए ताज़ा नहीं था, लेकिन अब यह ठीक से काम करने लगता है। आदमी में यह नहीं लिखा है कि यह फ़ाइल को ताज़ा करता है। man less: 'G या> या ESC-> फ़ाइल में लाइन N पर जाएँ, फ़ाइल के अंत को डिफ़ॉल्ट करें।' मैं यहां अपनी पुरानी गलत टिप्पणियों को हटाता हूं, उनके लिए खेद है।
यारोस्लाव निकितेंको

1
BTW, क्या आप 'एक बार आधार' कहते हैं? lessमार्क न्यूडेलमैन के अनुरक्षक ने निम्नलिखित उत्तर दिया: "जी कमांड सामान्य रूप से फाइल की री-रीड को बाध्य नहीं करता है जैसे कि आर कमांड करता है। ऐसा लग सकता है कि यदि फाइल का अंत अभी तक पढ़ा नहीं गया है जब जी। लागू किया जाता है, ताकि फ़ाइल के अंत में कूदने के लिए पहली बार वहां डेटा पढ़ना चाहिए। उदाहरण के लिए, यदि आप जी के साथ अंत में कूदते हैं, तो शुरुआत में 1 जी के साथ वापस कूदें, फिर एक अन्य कार्यक्रम डेटा को संशोधित करता है। फ़ाइल का अंत (लंबाई को बदले बिना), "(प्रतियोगिता)
यारोस्लाव निकितेंको

(प्रतियोगिता) "तो आप जी के साथ फिर से अंत में कूद जाते हैं, आपको संशोधित डेटा दिखाई नहीं देगा। लेकिन यदि आप अंत तक नहीं जाते हैं और शुरुआत में वापस आते हैं, तो पहली बार जब आप जी कमांड को निष्पादित करते हैं तो इसे अवश्य पढ़ना चाहिए। पहली बार वहाँ के डेटा, और निश्चित रूप से यह किसी भी संशोधन को देखेगा जो पहले कम हुआ था। "
यारोस्लाव निकितेंको

इस मामले में मैंने एक गतिशील रिफ्रेश के विपरीत एक बार के रिफ्रेश होने का उल्लेख किया , जो कि मूल प्रश्न क्या है, इसका एक हिस्सा है।
जोर्ब

1

आप फ़ाइल को पढ़ने के लिए vim का उपयोग कर सकते हैं फिर अपनी .vimrcफ़ाइल में निम्न मानचित्रण जोड़ सकते हैं और आप आसानी से किसी फ़ाइल को पुनः लोड कर सकते हैं ,r:

let mapleader = ","
nnoremap <leader>r :edit <CR>

ध्यान दें कि यदि आपने फ़ाइल को पहले ही संपादित कर लिया है, तो vim शिकायत करेगा। बस करने के लिए बदल जाते हैं

let mapleader = ","
nnoremap <leader>r :edit! <CR>

परिवर्तनों को अनदेखा करना।


उन्हें vimआपके ठंडे, मृत हाथों से शिकार करना होगा । प्रश्न के संदर्भ के बारे में है less, लेकिन खुद के रूप में monomaniacal प्रवृत्ति के साथ किसी को , मैं सहानुभूति रखता हूं!
बेंजामिन आर

1

Rहमेशा के लिए फ़ाइल को पुनः लोड नहीं करता है। [1]

फ़ाइल को हमेशा लोड करने वाला वर्कअराउंड प्रेस करना है hq, जो हेल्प पेज को खोलेगा, फिर छोड़ दें। यह फ़ाइल को फिर से लोड करने के लिए मजबूर करने का एक साइड इफेक्ट है।


[१] यहाँ कुछ परिस्थितियों के उदाहरण दिए गए हैं, जो Rपुन: लोड नहीं करते हैं:

  • >और >>परिवर्तन: पुनः लोड हो
  • sed -i, gEdit, TextEdit: पुनः लोड नहीं किया जाएगा
  • लिनक्स पर, viपरिवर्तन: पुनः लोड हो जाते हैं
  • मैक पर, viपरिवर्तन: पुनः लोड नहीं किया जाएगा

मेरा मानना ​​है कि अंतर घटता है कि क्या इनोड बदलता है (आप जांच कर सकते हैं ls -i foo.txt)। यदि इनोड में परिवर्तन होता है, तो Rकाम नहीं करेगा।


0

आप tail -fइसके बजाय इसे पाइप कर सकते हैं , यह आपको आउटपुट के बाद मिलेगा। हालांकि आप अपने आउटपुट के माध्यम से (स्क्रॉल) स्थानांतरित करने की क्षमता खो देंगे।


0

यदि आप एक ब्राउज़र का उपयोग करने से पीछे नहीं हैं तो आप इस कमांड के साथ अल्गर्नन वेब सर्वर लॉन्च कर सकते हैं :

algernon -a -t /directory/name

फ़ाइलों की एक सूची तब प्रदर्शित की जाएगी, और http: // localhost: 3000 /


गलत धागा? ..
टॉमस

यह एक निर्देशिका को देखने के लिए एक तरह से हो रहा है, हालांकि यह एक लंबा रास्ता से हैless
जेफ स्कालर

0

मुझे यह धागा किसी और की तरह मिला। जब आप पहले से ही फ़ाइल के अंत में हैं, तो मैं इसका समाधान जोड़ना चाहूंगा, 'जी' के बाद 'जी' का उपयोग करने से फ़ाइल को ताज़ा करने पर मजबूर होना पड़ेगा।

मैंने अपने टर्मिनल प्रोग्राम (सिक्योरसीआरटी) में इसके लिए एक मैक्रो बटन बनाना समाप्त किया। मैक्रो बस 'जीजी' है।

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