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


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.