मैं एक लिनक्स कमांड को अंतिम n
सेकंड में परिवर्तित फ़ाइलों को खोजने के लिए चाहूंगा ।
क्या कोई शेल स्क्रिप्ट या अन्य टूल है जिसे मैं कमांड लाइन इंटरफ़ेस या GUI से चला सकता हूं?
मैं एक लिनक्स कमांड को अंतिम n
सेकंड में परिवर्तित फ़ाइलों को खोजने के लिए चाहूंगा ।
क्या कोई शेल स्क्रिप्ट या अन्य टूल है जिसे मैं कमांड लाइन इंटरफ़ेस या GUI से चला सकता हूं?
जवाबों:
इस तरह कमांड का उपयोग करें:
find . -name "*.txt" -mtime -60s
*.txt
पिछले 60 सेकंड में संशोधित सभी फाइलों को खोजने के लिए ।
-mtime
। न ही "60 के दशक" यहां तक कि POSIX या GNU खोज में एक वैध विकल्प है। तर्क -mtime
वह संख्या है जो किसी फ़ाइल को संशोधित किए जाने से 24-घंटे पहले की संख्या निर्दिष्ट करती है।
माइम निर्दिष्ट सेकंड के साथ समाधान मेरे लिनक्स सिस्टम पर काम नहीं करता है जो find --version
== का उपयोग करता है find (GNU findutils) 4.4.2
।
मुझे निम्नलिखित त्रुटि मिलती है:
mycomputer:~/new$ find . -mtime -60s
find: missing argument to `-mtime'
mycomputer:~/new$ find . -mtime -60seconds
find: missing argument to `-mtime'
हालांकि, मैं -mmin
(अंतिम मी मिनट में संशोधित) का उपयोग कर सकता हूं , और क्या यह एक दशमलव तर्क में ले जा सकता है; उदाहरण के लिए, निम्नलिखित पिछले 30 सेकंड में संशोधित फ़ाइलें पाता है।
find . -mmin 0.5
उदाहरण के लिए; पिछली 1 सेकंड के लिए 1s, 6s, 11s, ... को संशोधित करते हुए फ़ाइलें बनाते हैं, यह कमांड पाता है:
mycomputer:~/new$ for i in $(seq 1 5 120); do touch -d "-$i seconds" last_modified_${i}_seconds_ago ; done
mycomputer:~/new$ find . -mmin 0.5
.
./last_modified_1_seconds_ago
./last_modified_26_seconds_ago
./last_modified_11_seconds_ago
./last_modified_16_seconds_ago
./last_modified_21_seconds_ago
./last_modified_6_seconds_ago
तो अगर आपको वास्तव में सेकंड में इसकी आवश्यकता है तो आप कुछ ऐसा कर सकते हैं:
localhost:~/new$ for i in $(seq 1 1 120); do touch -d "-$i seconds" last_modified_${i}_seconds_ago ; done
localhost:~/new$ N=18; find . -mmin $(echo "$N/60"|bc -l)
./last_modified_1_seconds_ago
./last_modified_9_seconds_ago
./last_modified_14_seconds_ago
./last_modified_4_seconds_ago
./last_modified_12_seconds_ago
./last_modified_13_seconds_ago
./last_modified_8_seconds_ago
./last_modified_3_seconds_ago
./last_modified_5_seconds_ago
./last_modified_11_seconds_ago
./last_modified_17_seconds_ago
./last_modified_16_seconds_ago
./last_modified_7_seconds_ago
./last_modified_15_seconds_ago
./last_modified_10_seconds_ago
./last_modified_6_seconds_ago
./last_modified_2_seconds_ago
ग्लेन ने जो सुझाव दिया, उसके समान, यदि आप सब कुछ संशोधित करना चाहते हैं, तो कहिए कि जिस समय में एक इंस्टॉलर प्रक्रिया चल रही थी, उस समय ऐसा करना आसान हो सकता है:
touch /tmp/checkpoint
<do installer stuff>
find / -newer /tmp/checkpoint
फिर आपको समय गणना करने की आवश्यकता नहीं है; आपको बस चेकपॉइंट फ़ाइल के बाद चीजें बदली हुई लगती हैं।
ऐसा करने का सबसे सरल तरीका है:
find . -name "*.txt" -newermt '6 seconds ago'
-mtime -60s
विकल्प, एक जवाब में उल्लेख किया है, के कई संस्करणों पर काम नहीं करता find
2016 में भी, -newermt
हमारे लिए एक बेहतर विकल्प है। यह कई अलग-अलग दिनांक और समय स्वरूपों को पार्स कर सकता है।
एक वैकल्पिक विधि का उपयोग mmin
है:
find . -name "*.txt" -mmin -0.5
# Finds files modified within the last 0.5 minute, i.e. last 30 seconds
यह विकल्प सभी find
संस्करणों के लिए काम नहीं कर सकता है ।
यदि आप फ़ाइलों में परिवर्तन के लिए निर्देशिका की निगरानी कर रहे हैं, तो आप शायद कुछ अनंत मतदान पाश के बजाय inotify-tools का उपयोग करना चाहते हैं ।
find: missing argument to `-mtime'
:। हालाँकि, मैं -मिनट और दशमलव तर्क का उपयोग करके वांछित व्यवहार प्राप्त कर सकता हूं। मैंs
तर्क के रूप में उपयोग करने के लिए खोजने के लिए मैनपेज में कोई संदर्भ नहीं मिला ।