2011-02-28 9 views
7

मैं 0 दिन पुरानी फ़ाइल ढूंढने की कोशिश कर रहा हूं। नीचे दिए गए चरणों मैं इस"ढूंढें आदेश -mtime 0" फ़ाइल प्राप्त नहीं कर रहा है मुझे उम्मीद है कि

$ ls 
$ ls -ltr 
total 0 
$ touch tmp.txt 
$ ls -ltr 
total 0 
-rw-r----- 1 tstUser tstUser   0 Feb 28 20:02 tmp.txt 
$ find * -mtime 0 
$ 
$ find * -mtime -1 
tmp.txt 
$ 

क्यों '-mtime 0' नहीं मुझे फ़ाइल हो रही है परीक्षण करने के लिए किया जाता है?

'-mtime 0' और '-mtime -1' के बीच सटीक अंतर क्या है?

मुझे यकीन है कि यूनिक्स में 0 दिन पुरानी फ़ाइलों को ढूंढने के अन्य तरीके होने चाहिए, लेकिन यह समझने में उत्सुकता है कि यह '-mtime' वास्तव में कैसे काम करता है।

उत्तर

5
-mtime n 
      File's data was last modified n*24 hours ago. See the comments 
      for -atime to understand how rounding affects the interpretation 
      of file modification times. 

तो, -mtime 0 के बराबर होगा: "। फ़ाइल के डेटा पिछले 0 घंटे पहले संशोधित किया गया था -mtime 1 हो जबकि होगा:" फाइल के डेटा पिछले 24 घंटे पहले संशोधित किया गया था "

संपादित करें :

Numeric arguments can be specified as 

    +n  for greater than n, 

    -n  for less than n, 

    n  for exactly n. 

तो मुझे लगता है कि -1, पिछले 24 घंटों के भीतर संशोधित किया जाएगा, जबकि 1 ठीक एक दिन होगा

+0

क्या आप मुझे समझने में मदद कर सकते हैं कि '-mtime 0' कभी भी उपयोगी कैसे होगा ?? –

+0

अच्छा सवाल। आप उस फ़ाइल को ढूंढ सकते हैं जो घंटे के भीतर बदल दिया गया था। कम से कम मुझे लगता है कि यह क्या करेगा। मैंने वास्तव में यह जांच नहीं की है। – veiset

6

यहके उपयोगकर्ता नहीं अनुकूल पहलू है।- आपको समझना होगा कि मिलान वास्तव में आपके खोज मानदंडों को सही तरीके से परिभाषित करने के लिए कैसे काम करता है। निम्नलिखित स्पष्टीकरण जीएनयू खोज (findutils) 4.4.2 पर आधारित है।

find परीक्षण -atime, -ctime, 24 घंटे की अवधि पर -mtime काम करते हैं, इसलिए के रूप में

floor (current_timestamp - file_modification_timestamp/86400) 

को देखते हुए तीन फ़ाइलें 1 घंटे पहले, 25 घंटे पहले संशोधित "फ़ाइल उम्र" को परिभाषित करते हैं और 49 घंटे पहले

$ touch -t $(date -d "1 hour ago" +"%m%d%H%M") a.txt 
$ touch -t $(date -d "25 hours ago" +"%m%d%H%M") b.txt 
$ touch -t $(date -d "49 hours ago" +"%m%d%H%M") c.txt 

फ़ाइल उम्र (जैसा कि ऊपर परिभाषित)

$ echo "($(date +"%s") - $(stat -c %Y a.txt))/86400" | bc 
0 
$ echo "($(date +"%s") - $(stat -c %Y b.txt))/86400" | bc 
1 
$ echo "($(date +"%s") - $(stat -c %Y c.txt))/86400" | bc 
2 
01 हैं

ऊपर देखते हुए यहां क्या लगता है

$ find -type f -mtime 0 # find files with file age == 0, i.e. files modified less than 24 hours ago 
./a.txt 
$ find -type f -mtime -1 # find files with file age < 1, i.e. files modified less than 24 hours ago 
./a.txt 
$ find -mtime 1 # find files with file age == 1, i.e. files modified more than (or equal to) 24 hours ago, but less than 48 hours ago 
./b.txt 
$ find -mtime +1 # find files with file age > 1, i.e. files modified more than 48 hours ago 
./c.txt 

यह दिखाता है कि -mtime 0 और -mtime -1 बराबर परिणाम दे करता है।

-mmin बेहतर ग्रैन्युलरिटी के साथ एक ही परीक्षण देता है - तर्क 24 घंटे की अवधि के बजाय मिनट है।
n:

मैं के रूप में अनुसरण कर रहे हैं find

$ touch tmp.txt 
$ find * -mtime 0 
tmp.txt 
$ find * -mtime -1 
tmp.txt 
0

उन तीन संभावनाओं के अर्थ के ऊपर उल्लिखित संस्करण का उपयोग कर अपनी समस्या का पुन: पेश करने में असमर्थ हूँ वास्तव में एन 24 घंटे की अवधि (दिन) पहले, 0 आज का मतलब है।
+ n: "अधिक तो 24 घंटे की अवधि (दिन) पहले", या पुराना तो एन,
-n: 24 घंटे की अवधि (दिन) पहले (-n), या फिर छोटे से कम। यह स्पष्ट है कि -1, और 0 समान हैं और दोनों का अर्थ है "आज"

नोट: आप स्क्रिप्ट में खोज कमांड के साथ मानकों का उपयोग करते हैं जब -mtime पैरामीटर शून्य के बराबर है सावधान रहें। जीएनयू के कुछ (पहले) संस्करणों में निम्नलिखित अभिव्यक्ति को गलत तरीके से समझना सॉरेस: http://www.softpanorama.org/Tools/Find/index.shtml

संबंधित मुद्दे