सभी हाल ही में बदली गई फ़ाइलों की सूची (पुनरावर्ती)


21

इसलिए, मैं lsसभी फ़ाइलों को प्रदर्शित करना चाहता हूं ( उदाहरण के लिए), जिन्हें पिछले सात दिनों में बदल दिया गया था। अगर मैं अपने डॉक्रो-फोल्डर में हूं, तो यह "गहरा" दिखने में सक्षम होना चाहिए।

उदाहरण के लिए:

File        Last changed
docroot
|- myfile1  30.11.2015
|- myfile2  10.11.2015
|- MySub
   |-sub1   30.11.2015
   |-sub2   10.11.2015

तो, ls(या जो भी फिट हो) आउटपुट करना चाहिए myfile1और (यदि संभव हो तो) MySub/sub1

क्या यह एक आदेश के साथ करने योग्य है?

जवाबों:


39

बेशक। निर्देशिका से आप कर रहे हैं:

find . -type f -mtime -7 -exec ls -l {} \; 

इसमें एक पुनर्निर्देशन जोड़ें (उर्फ > results.txtउन्हें उस फ़ाइल में संग्रहीत करने के लिए)।

  • type f केवल फ़ाइलें और निर्देशिका नहीं करता है
  • mtime -7 अब से 7 दिन पहले तक (+7 '7 दिनों से अधिक पुराना होगा')
  • और फिर इसे lsएक लंबी सूची दिखाने के लिए फीड करता है

आप ls -lभाग के साथ भी खेल सकते हैं :

find . -type f -mtime -7 -exec ls -Rl --time-style=long-iso {} \; 
find . -type f -mtime -7 -exec ls -R  --time-style=long-iso {} \; 

लंबी सूची (1) या छोटी सूची (2) में फ़ाइलों के बीच निर्देशिकाओं के साथ विधि की तरह एक पेड़ दिखाएगा।


4
findहै lsविकल्प तो तुम सिर्फ कर सकता हैfind . -type f -mtime -7 -ls
heemayl

ज़रूर, लेकिन यह इसे थोड़ा अधिक सामान्य बनाता है (मैं इस विधि का उपयोग उन फ़ाइलों को खोजने के लिए करता हूं जिनकी मुझे आवश्यकता होती है -और मुझे यह करने के लिए उस आदेश को बदल सकते हैं :))
Rinzwind

3
यह भी उपयोग करने के लिए अधिक उपयुक्त है find ... -exec ls -l {} +जो ls -lबहुत अधिक कुशलता से निष्पादित करता है - कई मापदंडों के साथ कम समय। यह findPOSIX द्वारा निर्दिष्ट का एक मानक विकल्प है ।
पाबौक 12

5

के साथ zsh:

ls -l **/*(.m-7)
  • **/* वर्तमान निर्देशिका से पुन: प्रारंभ होने वाली फ़ाइलों की तलाश करेगा

  • (.m-7)ग्लोब क्वालीफायर .है जो नियमित फ़ाइल को m-7इंगित करता है , पिछले 7 दिनों के भीतर संशोधित की गई फ़ाइलों को इंगित करता है


2

निम्न आदेश मैक OSX पर एक सपना काम करता है - शायद ubuntu पर भी ...

find . -type f -mtime -7 -exec stat -lt "%Y-%m-%d %H:%M:%S" {} \; | cut -d\  -f6- | sort -r

यह वर्तमान निर्देशिका ट्री में फाइलें ढूंढता है जिन्हें पिछले 7 दिनों में संशोधित किया गया है, संशोधन की तारीख + समय और पथ को संशोधित करता है, पहले नए क्रमबद्ध करता है।

उदाहरण आउटपुट:

2018-02-21 22:06:30 ./fmxmlsnippet.xml
2018-02-19 12:56:01 ./diff.html
2018-02-19 12:44:37 ./temp/iDDR/XMSC_fmxmlsnippet.xml
2018-02-18 22:04:05 ./temp/iDDR/XMFD_fmxmlsnippet.xml
2018-02-15 10:18:27 ./xml/iDDR/XML2_fmxmlsnippet.xml
2018-02-15 10:13:29 ./xsl/fmxmlsnippet/XML2_fmCM_AnalyseLayout.xsl
2018-02-15 10:11:36 ./xsl/.DS_Store
2018-02-15 10:10:51 ./xsl/_inc/inc.XML2_fmCM_ReportReferencesToExternalFiles.xsl
2018-02-15 10:10:09 ./xsl/_inc/.DS_Store
2018-02-15 10:07:35 ./xsl/fmxmlsnippet/XML2_fmCM_AnalyseLayout-NoAnchors.xsl
2018-02-15 10:07:35 ./xsl/_inc/inc.XML2_fmCM_AnalyseLayout.xsl

मैं ubuntu उपयोगकर्ताओं से किसी भी प्रतिक्रिया के आभारी होंगे।


एकमात्र समाधान जिसने मैक पर मेरे लिए अच्छा काम किया। धन्यवाद!
आर्टनिकप्रो

आपका स्वागत है @artnikpro!
MrWatson

1

नहीं बिल्कुल क्या पूछा गया था ... लेकिन याद रखना बहुत आसान ...

ls -alRt docroot

या

ls -alRt /path/to/top/level/directory

0

7 दिन कि 60 सेकंड * 60 मिनट * 24 घंटे * 7 दिन = 604800 सेकंड

सेकंड में वर्तमान तिथि ज्ञात करें (यूनिक्स युग समय):

$ date +%s
1448876323

सेकंड में 7 दिन घटाएँ:

expr $(date +%s) - 604800
1448271548

अब statसभी फाइलों के लिए कमांड और प्रिंट आँकड़े "नाम + सेकंड में समय" के लिए लें और awkउन फ़ाइलों को बंद करने के लिए उपयोग करें जिनके संशोधन का समय अधिक है उस तिथि की गणना हमने की थी

$ stat --printf="%n %Y\n" $HOME/* | awk '$2 > 1448271265 {print $0}'
/home/xieerqi/1448428697574.png 1448429613
/home/xieerqi/1448763343273.png 1448763478
/home/xieerqi/1510DRIVE 1448352453
/home/xieerqi/addRemoveDistribution 1448666843
/home/xieerqi/add-update.awk 1448716356
/home/xieerqi/add-update.sh 1448625092

विशेष रूप से ब्याज की आखिरी 3 फाइलें हैं, क्योंकि मुझे पता है कि मैं उन्हें 7 दिन पहले कम काम कर रहा था। इस प्रकार मुझे पता है कि यह काम करता है


2
ध्यान दें कि awk '$2 > 1448271265 {print $0}'आप के बजाय diretly कह सकते हैं awk '$2 > 1448271265'। सही स्थिति में, awk एक डिफ़ॉल्ट क्रिया के रूप में वर्तमान रेखा को प्रिंट करता है।
फेडोरक्वी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.