'खोज' कमांड के साथ संशोधित तिथि समय कैसे प्रदर्शित करें?


85

एक findकमांड के साथ , मैं कई स्तरों के साथ निर्देशिका नामों को प्रदर्शित कर सकता हूं। निम्नलिखित कमांड /var2 की गहराई के साथ सभी निर्देशिकाओं को पथ के नीचे प्रदर्शित करता है :

find /var -maxdepth 2 -type d;

परिणाम दिखाता है:

/var
/var/log
/var/log/sssd
/var/log/samba
/var/log/audit
/var/log/ConsoleKit
/var/log/gdm
/var/log/sa

एक statआदेश के साथ , मैं संशोधित तिथि समय पा सकता हूं:

stat /var/log/samba | grep 'Modify:'

परिणाम है:

Modify: 2014-01-02 11:21:27.762346214 -0800 

क्या दो आदेशों को संयोजित करने का एक तरीका है ताकि निर्देशिकाओं को संशोधित तिथि समय के साथ सूचीबद्ध किया जाएगा?

जवाबों:


63

आप -execस्विच का उपयोग कर सकते हैं और स्विच का उपयोग findकरने के आउटपुट स्वरूप को परिभाषित statकर सकते -cहैं:

find /var -maxdepth 2 -type d -exec stat -c "%n %y" {} \;

यह आउटपुट के एक ही लाइन पर उसके संशोधन समय के बाद फ़ाइल नाम देना चाहिए।


यह मेरे जवाब से बेहतर है, +1
Kent

-printfबुला टाल नीचे दिए गए विकल्प statहर फ़ाइल के लिए मिल गया। मेरे परीक्षण में कमांड लगभग समान आउटपुट देता है, सेकंड पर सिर्फ एक अतिरिक्त अंक की परिशुद्धता।
mwfearnley

MacOS के लिए प्रारूप arg वर्ण statहै -ffind /var -maxdepth 2 -type d -exec stat -f "%t%Sm %N" {} \;
टॉडकसर जू

126

स्वीकृत उत्तर काम करता है लेकिन यह धीमा है। प्रत्येक निर्देशिका के लिए स्टेट को निष्पादित करने की कोई आवश्यकता नहीं है, खोजने के लिए संशोधन तिथि प्रदान करता है और आप इसे सीधे प्रिंट कर सकते हैं। यहां एक समतुल्य कमांड है जो काफी तेज है:

 find /var -maxdepth 2 -type d -printf "%p %TY-%Tm-%Td %TH:%TM:%TS %Tz\n"

4
एक बेहतर समाधान। यह findविंडोज पर चलने वाले msys से भी काम करता है , जिसमें statकमांड का अभाव है ।
स्नोरफालोर्पस

7
Macs पर, 'ब्रुअ इंस्टॉल इन्सट्यूटिल्स' और फिर gfind में -प्रिंटफ विकल्प है।
वीकेपॉइंटर्स

%Tcप्रिंट "स्थानों की तारीख और समय", प्रारूप स्ट्रिंग "% p% Tc" की अनुमति देता है
एंड्रियास

% फॉर्मेटर्स के स्पष्टीकरण के लिए अधिक उपयोगी लिंक। unix.stackexchange.com/a/215236/216480 या मैन पेज सर्च पर "-printf format"
18'18

1
जबकि प्रारूप स्ट्रिंग "% p% Tc" काम करता है, यह आउटपुट को थोड़ा अलग तरीके से प्रारूपित करता है। जैसे "/ var / spool Mon 29 Sep 2014 09:05:54 BST" के बजाय "/ var / spool 2014-09-29 09: 05: 54.000000000 +0100"।
केजर

15

find /var -maxdepth 2 -type d | xargs ls -oAHd

यह lsपूरी निर्देशिका पथ प्रदर्शित करने के लिए अपने मूल आदेश प्राप्त करने का एक तरीका है । जबकि lsहै -Rपुनरावर्ती खोज के लिए पैरामीटर, रास्तों के साथ परिणामों में प्रदर्शित नहीं किया जाएगा -lया -o(, OSX में कम से कम) विकल्प के साथ पूर्व के लिए: ls -lR


कृपया एक स्पष्टीकरण जोड़ें कि यह प्रश्न का उत्तर क्यों देता है। सामान्य तौर पर, जब भी आप StackOverflow पर एक उत्तर में उदाहरण कोड पोस्ट करते हैं, तो संस्कृति को हमेशा इसके लिए स्पष्टीकरण प्रदान करना होता है। अन्यथा करने के लिए जोखिम वाले मॉडरेटर्स कम लंबाई और स्पष्टीकरण की कमी के कारण कम गुणवत्ता वाले उत्तर के रूप में आपके उत्तर को हटा देते हैं।
साइडशोबर्कर

3
यह एक आप प्राप्त कर सकते हैं find /var -maxdepth 2 -type d -lsजिसके साथ बस सरल है।
ग्रेज़गोरोज़ क्रुज़े

13

हाल के GNU संस्करणों findमें एक -printfविकल्प भी शामिल है जिसमें दिनांक फ़ील्ड शामिल हैं। यदि आपको मानक "सी" प्रारूप में फ़ाइल का नाम और संशोधन समय प्रिंट करने की आवश्यकता है, तो आप उपयोग कर सकते हैं-printf "%c %p\n"

यदि आप किसी विशिष्ट प्रारूप में दिनांक चाहते हैं, तो आप %Cकिसी फ़ील्ड वर्ण द्वारा अनुसरण कर सकते हैं । उदाहरण के लिए, 4-अंक वर्ष, 4-अंक वर्ष के लिए चरित्र होने के %CYसाथ होगा Y
ध्यान दें कि यदि आपको कई क्षेत्रों की आवश्यकता है, तो आपको %Cकई बार निर्दिष्ट करने की आवश्यकता होगी । उदाहरण के लिए, YYYY-MM-DD प्रारूप जैसा दिखेगा%CY-%Cm-%Cd

मैन पेज या ऑनलाइन प्रलेखन की जाँच करेंअतिरिक्त विवरण के लिए देखें।

यहाँ एक काम कर उदाहरण है:

find . -name favicon.ico -printf "%c %p\n"

8

एक और जिसे मैं पिछले दिनों संशोधित फ़ाइलों को प्रिंट करने के लिए उपयोग करता हूं। ls-exr मुझे अधिक समय देता है जैसे संशोधन समय, उपयोगकर्ता आदि

find <my_dir> -mtime -1 -type f -print | xargs ls -ltr 

1
यह सबसे सरल, याद रखने में आसान और टाइप करने में सबसे तेज है। (मैं एक -name '*.ext'विनिर्देश का उपयोग करने के बजाय -mtime और -type आर्ग्स के बिना इसका उपयोग करता हूं । ls -ltसंशोधन के समय पर टाइप करें ।)
ब्रेंट फॉस्ट

2
यह तब काम नहीं करता है जब फ़ाइलनाम में स्थान होता है। बेहतर है -print0इसके बजाय का -printउपयोग करें और फिर के xargs -0बजाय का उपयोग करें xargs
emk2203

xargsआदेशों की lsअत्यधिक संख्या के साथ लागू होने से रोकने के लिए, कई बार मापदंडों की संख्या के आधार पर ( यहां) आदेश लागू कर सकते हैं । इसलिए, सॉर्टिंग (जो भी मानदंड, तिथि सहित) एक "गलत" परिणाम दे सकता है (=> सॉर्ट किए गए सबसेट की सूची, पूर्ण सेट सॉर्ट के बजाय)।
हमीद

1

इस लाइन को आज़माएं:

find /var -maxdepth 2 -type d|xargs stat|grep -E 'File|Modi'

यहाँ मैंने इसे चलाया, यह आउटपुट:

....
  File: ‘/var/cache/cups’
Modify: 2013-12-24 00:42:59.808906421 +0100
  File: ‘/var/log’
Modify: 2014-01-01 12:41:50.622172106 +0100
  File: ‘/var/log/old’
Modify: 2013-05-31 20:40:23.000000000 +0200
  File: ‘/var/log/journal’
Modify: 2013-12-15 18:56:58.319351603 +0100
  File: ‘/var/log/speech-dispatcher’
Modify: 2013-10-27 01:00:08.000000000 +0200
  File: ‘/var/log/cups’
Modify: 2013-12-22 00:49:52.888346088 +0100
  File: ‘/var/opt’
Modify: 2013-05-31 20:40:23.000000000 +0200
....
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.