2011-02-14 9 views
52

तो यह सौदा है। मान लीजिए कि मैं "वेब" नाम की एक निर्देशिका करते हैं, तो, मैं अपनी सामग्री को ध्यान में रखते हुए फ़ोल्डर की अंतिम संशोधन तिथि कैसे दिखा सकता हूं?

$ ls -la 

drwx------ 4 rimmer rimmer 4096 2010-11-18 06:02 web 

लेकिन इस निर्देशिका, वेब/php के अंदर/

$ ls -la 

-rw-r--r-- 1 rimmer rimmer 1957 2011-01-05 08:44 index.php 

इसका मतलब है कि यहां तक ​​कि मेरी निर्देशिका की सामग्री,/वेब/php हालांकि /index.php को अंतिम बार 2011-01-05 में संशोधित किया गया है,/web/निर्देशिका को 2010-11-18 में अंतिम बार संशोधित किया गया है।

मुझे क्या करना है मेरी/वेब/निर्देशिका की आखिरी संशोधन तिथि इस निर्देशिका के अंदर किसी भी फ़ाइल/निर्देशिका की नवीनतम संशोधन तिथि के रूप में रिपोर्ट की गई है।

कैसे मैं यह कर के बारे में जाते हैं?

+1

मैं ' मैं उत्सुक हूं कि आपको ऐसा क्यों करना है। –

उत्तर

47

कुछ की तरह:

find /path/ -type f -exec stat \{} --printf="%y\n" \; | 
    sort -n -r | 
    head -n 1 

स्पष्टीकरण:

  • खोजने आदेश हर फ़ाइल रिकर्सिवली निर्देशिका अनदेखी के लिए संशोधन समय प्रिंट होगा (IQAndreas द्वारा टिप्पणी आप फ़ोल्डरों पर भरोसा नहीं कर सकते के अनुसार टाइम स्टांप)
  • तरह -n (संख्यानुसार) -r (विपरीत)
  • सिर -n 1: पहली प्रविष्टि प्राप्त
+2

प्यार पाइपिंग ... – grisaitis

+1

[कोर्यूटिल्स प्रलेखन] के अनुसार (https://www.gnu.org/software/coreutils/manual/html_node/head-invocation.html#head-invocation), आप 'सिर पर विचार कर सकते हैं अप्रचलित वाक्यविन्यास के बजाय -n 1' या 'sed 1q'। – sappjw

+1

तो 'पहली -1' वापस लौटने के लिए 'सिर -1' अब अप्रचलित है ... मैन, मुझे याद है जब यह नया ध्वज होता था - मैं वह पुराना हूँ !!!: ओ) –

5

यदि मैं कर सकता, तो मैं पाउलो द्वारा जवाब के लिए वोट दूंगा। मैंने इसका परीक्षण किया और अवधारणा को समझ लिया। मैं पुष्टि कर सकता हूं कि यह काम करता है। find कमांड कई पैरामीटर आउटपुट कर सकते हैं। उदाहरण के लिए, --printf खंड को निम्नलिखित जोड़ें:

%a for attributes in the octal format 
%n for the file name including a complete path 

उदाहरण:

find Desktop/ -exec stat \{} --printf="%y %n\n" \; | sort -n -r | head -1 
2011-02-14 22:57:39.000000000 +0100 Desktop/new file 

मुझे भी इस सवाल उठाते हैं: इस सवाल के लेखक बैश का उपयोग कर उसकी समस्या को हल करना चाहते हैं करता है या PHP? यह निर्दिष्ट किया जाना चाहिए।

+2

अच्छा सवाल, मैंने सोचा कि यह स्पष्ट था, क्योंकि मेरे टैग "बैश, स्क्रिप्टिंग, खोल" कहते हैं। मैं बैश का उपयोग करके इस समस्या को हल करना चाहता हूं, हां। यह सर्वर फ़ाइलों का बैक अप लेने के लिए है। मुझे लगता है कि समस्या अब हल हो गई है, समाधान सही काम करते हैं :) –

+0

आप * दोनों * 'stat' और 'find' के अंतर्निहित' -प्रिंटफ़' ध्वज का उपयोग कर रहे हैं, और फिर मूल रूप से परिणामों में से एक को फेंक रहे हैं । मुझे लगता है कि आपको पूर्व में बाद में पसंद करना चाहिए, जैसा कि एक अलग उत्तर में उल्लिखित है (प्रत्येक फ़ाइल के लिए एक अलग प्रक्रिया को उत्पन्न करने की आवश्यकता नहीं है जब 'ढूंढ' पहले से ही एक प्रक्रिया में करता है)। – tripleee

17

आप में से (जीएनयू find जैसे) है कि -printf का समर्थन करता है तो कोई ज़रूरत नहीं है find एक संस्करण stat बार-बार फोन करने के लिए है, तो:

find /some/dir -printf "%T+\n" | sort -nr | head -n 1 

या

find /some/dir -printf "%TY-%Tm-%Td %TT\n" | sort -nr | head -n 1 

आप की जरूरत नहीं है रिकर्सन, हालांकि:

stat --printf="%y\n" * 
संबंधित मुद्दे

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