क्या वास्तविक समय में निर्देशिका की सामग्री को प्रदर्शित करने के लिए कोई अंतर्निर्मित लिनक्स कमांड है?


8

क्या वास्तविक समय में किसी निर्देशिका की सामग्री को प्रदर्शित करने के लिए कोई अंतर्निर्मित लिनक्स कमांड है, जो "टेल -f file_name" कमांड के समान है, जो वास्तविक समय में फाइल की सामग्री को प्रदर्शित करता है।


4
कैसे के बारे मेंwatch -n1 ls
जो

घड़ी पर एक नज़र डालें ( linfo.org/watch.html )
डेविड सीगंड्स

4
बिल्ट-इन नहीं, बल्कि inotifytoolsपैकेज लिनक्स की inotifyसुविधा का उपयोग करके फ़ाइल निर्माण की घटनाओं को देखने की अनुमति देता है जैसा कि वे होते हैं।
15:12 बजे chepner

जवाबों:


6

आप इसका उपयोग कर सकते हैं watch। यह पूरी तरह से वास्तविक समय नहीं है, लेकिन काफी करीब है (एक सेकंड के दसवें तक):

watch -n0.1 ls

मैनुअल से:

-n, --interval seconds
          Specify update interval.  The command will not allow quicker than 0.1 second interval, in which the smaller values are converted.

1
यदि आप नई फ़ाइलों को अधिक स्पष्ट रूप से देखना चाहते हैं, ls -ltतो लिस्टिंग के शीर्ष पर नई फ़ाइलों ls -ltrको देखने के लिए या नीचे स्थित नई फ़ाइलों को देखने के लिए उपयोग करें। फिर, उन नई फाइलों watch -dको हाइलाइट करने के लिए, नवीनतम अपडेट watch --differences=cumulativeमें परिवर्तनों को उजागर करने के लिए या सभी परिवर्तनों को हाइलाइट करने के लिए उपयोग करें watch
garyjohn

@ jm666 - watch tail lsया watch head lsसही के साथ नवीनतम फाइलों को दिखायेगा ls आदेश देने जैसे विकल्प, -lt साथ सिर या -ltr साथ पूंछ
AFH

@ jm666 - बेशक यह बकवास है अगर सचमुच लिया गया है: मैं इसे शॉर्टहैंड के रूप में इस्तेमाल कर रहा थाwatch {options} 'ls {options} | tail {options}'
AFH

@ jm666: अनुरोध एक कमांड के लिए था जो tail -fफ़ाइल में परिवर्तन के बाद एक निर्देशिका में परिवर्तन का अनुसरण करता है। आपका मूल आदेश यह watchथा कि बहुत अच्छा नहीं किया। मुझे लगता है कि अगर यह चलता है तो यह उचित रूप से तैयार किया जाएगा। कभी-कभी आपको sh -cअधिक जटिल कमांड को लपेटने के लिए उपयोग करना होगा। मैंने संक्षेप में inotify-tools को देखा और एक कमांड नहीं देखा जो एक निर्देशिका में परिवर्तन दिखाएगा, न कि केवल एक निर्देशिका पर लागू होने वाली घटनाएं।
garyjohn

2

मैंने यह लिखा है, मुझे आशा है कि यह आपकी आवश्यकता है। यह एक नहीं है built-in Linux command, लेकिन यह अधिकांश UNIX बक्से में मौजूद केवल सामान्य कार्यक्रमों का उपयोग करता है।

sleepआवश्यकतानुसार समय समायोजित करें । मैं कम से कम 2 सेकंड के मूल्य का उपयोग करूंगा। cmd="ls"गैर-पुनरावर्ती संरचना के लिए उपयोग करें या cmd="find DIRNAME"पुनरावर्ती खोज करने के लिए। ध्यान दें कि अंतिम स्थिति में, आपको DIRNAME/सभी फ़ाइलों और निर्देशिकाओं के लिए एक उपसर्ग मिलेगा ।

 echo "" | awk '{while ( 1 ) {cmd="find ."; delete b;c=0; while ( ( cmd | getline result ) > 0 ) {test=1;c++;n=0;for (i in a) {n++;if (a[i]==result) {b[c]=i; test=0; break;}} if (test) {n++;a[n]=result;b[c]=n;print "##NEW## "result }} close (cmd); for (i in a) {test=1;for (j in b) {if (b[j]==i) {test=0;break}} if (test) {print "##DELETED## "a[i]; delete a[i]}} system("sleep 5") } }'

एक बग मिला जिसे iलूप करने के बाद खोई हुई कीमत मिल गई जिसने स्क्रिप्ट को हर बार कुछ नया दिखाने के लिए कुछ
लाइन

1

मुझे पता है कि यह इतना आसान है।

watch -d dir_name

0

आप उपयोग कर सकते हैं inotifytoolsऔर इसकी कमांड लाइन उपयोगिताओं।

आप inotifyनिर्देशिका को मॉनिटर करने के लिए उपयोग कर सकते हैं , और यह निर्देशिका के लिए और निर्देशिका के अंदर फ़ाइलों के लिए घटनाओं को वापस कर देगा।

एक और उपकरण जिसका उपयोग किया जा सकता है inotifywatch:

sudo inotifywatch -v -r /foo

आप -rसभी उपनिर्देशिकाओं को पुनरावर्ती रूप से देखने के लिए जोड़ सकते हैं । हालाँकि यह समाधान नव निर्मित फ़ाइलों पर परिवर्तनों का पता नहीं लगाता है

तो एक और समाधान का उपयोग करने के लिए है inotifywait:

inotifywait -m --format "%f" /foo

यहां सभी नई बनाई गई test*फ़ाइलों की सामग्री दिखाने का एक और उदाहरण दिया गया है /tmp:

inotifywait -m --format "%f" /tmp | grep --line-buffered ^test | xargs -L1 -I% sudo cat /tmp/% 2> /dev/null
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.