अंतिम n सेकंड में परिवर्तित फ़ाइलों को खोजने के लिए लिनक्स कमांड


19

मैं एक लिनक्स कमांड को अंतिम nसेकंड में परिवर्तित फ़ाइलों को खोजने के लिए चाहूंगा ।

क्या कोई शेल स्क्रिप्ट या अन्य टूल है जिसे मैं कमांड लाइन इंटरफ़ेस या GUI से चला सकता हूं?

जवाबों:


14

इस तरह कमांड का उपयोग करें:

find . -name "*.txt" -mtime -60s

*.txtपिछले 60 सेकंड में संशोधित सभी फाइलों को खोजने के लिए ।


17
Linux में, Find (GNU findutils 4.4.2 से) का उपयोग करके, मुझे इस कमांड के साथ एक त्रुटि मिलती है find: missing argument to `-mtime':। हालाँकि, मैं -मिनट और दशमलव तर्क का उपयोग करके वांछित व्यवहार प्राप्त कर सकता हूं। मैं sतर्क के रूप में उपयोग करने के लिए खोजने के लिए मैनपेज में कोई संदर्भ नहीं मिला ।
jimbob

4
-60s एक मान्य तर्क नहीं है -mtime। न ही "60 के दशक" यहां तक ​​कि POSIX या GNU खोज में एक वैध विकल्प है। तर्क -mtimeवह संख्या है जो किसी फ़ाइल को संशोधित किए जाने से 24-घंटे पहले की संख्या निर्दिष्ट करती है।
डानायसॉयर 16

13

माइम निर्दिष्ट सेकंड के साथ समाधान मेरे लिनक्स सिस्टम पर काम नहीं करता है जो 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

8

ग्लेन ने जो सुझाव दिया, उसके समान, यदि आप सब कुछ संशोधित करना चाहते हैं, तो कहिए कि जिस समय में एक इंस्टॉलर प्रक्रिया चल रही थी, उस समय ऐसा करना आसान हो सकता है:

touch /tmp/checkpoint
<do installer stuff>
find / -newer /tmp/checkpoint

फिर आपको समय गणना करने की आवश्यकता नहीं है; आपको बस चेकपॉइंट फ़ाइल के बाद चीजें बदली हुई लगती हैं।


6

यदि आपके पास खोज का एक संस्करण है जो समर्थन नहीं करता है -mtime -60sतो एक बेहतर समाधान है

touch -d '-60 seconds' /tmp/newerthan
find . -name "*.txt" -newer /tmp/newerthan

6

ऐसा करने का सबसे सरल तरीका है:

find . -name "*.txt" -newermt '6 seconds ago'

-mtime -60sविकल्प, एक जवाब में उल्लेख किया है, के कई संस्करणों पर काम नहीं करता find2016 में भी, -newermtहमारे लिए एक बेहतर विकल्प है। यह कई अलग-अलग दिनांक और समय स्वरूपों को पार्स कर सकता है।

एक वैकल्पिक विधि का उपयोग mmin है:

find . -name "*.txt" -mmin -0.5

# Finds files modified within the last 0.5 minute, i.e. last 30 seconds

यह विकल्प सभी findसंस्करणों के लिए काम नहीं कर सकता है ।


2
यह स्पष्ट रूप से सबसे अच्छा समाधान है।
rednoah

1

यदि आप फ़ाइलों में परिवर्तन के लिए निर्देशिका की निगरानी कर रहे हैं, तो आप शायद कुछ अनंत मतदान पाश के बजाय inotify-tools का उपयोग करना चाहते हैं ।


1

यदि आपका संस्करण findसेकंड या वास्तविक मानों को स्वीकार नहीं करता है, जैसे मेरा, उपयोग करें -mmin, लेकिन 0 निर्दिष्ट करें, और आपको एक मिनट से भी कम समय में संशोधित सभी फाइलें मिलेंगी:

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