लिनक्स: <डेट> से पुरानी फाइलों का पता लगाने के लिए खोज का उपयोग करना


31

findफ़ाइलों को X से कम दिन पहले संशोधित करने के लिए अच्छा समर्थन है, लेकिन मैं findएक निश्चित तिथि के बाद संशोधित सभी फ़ाइलों का पता लगाने के लिए कैसे उपयोग कर सकता हूं ?

मुझे findऐसा करने के लिए मैन पेज में कुछ भी नहीं मिला , केवल किसी अन्य फाइल के समय की तुलना करने या बनाए गए समय और अब के बीच के अंतर की जांच करने के लिए। वांछित समय के साथ एक फ़ाइल बना रहा है और इसके खिलाफ तुलना करने का एकमात्र तरीका है?


1
यह बेहतर होगा SuperUser.com पर
जोश ब्राउनर

6
मैं इसे बंद नहीं करने जा रहा हूं: साथ ही सीसडैमिन के लिए दिलचस्प हो सकता है।
splattne

कमांड एक बैकअप स्क्रिप्ट के हिस्से के लिए है, जो हमारे रात्रिकालीन बैकअप में पोस्ट-इंस्टॉलेशन परिवर्तित किए गए / आदि से सब कुछ पकड़ लेता है।
DrStalker

नौ साल पुराना है और मैंने सिर्फ एक नए जवाब को मॉडरेट करते समय देखा है: इस सवाल का शीर्षक और शरीर समान नहीं है। शीर्षक '' तारीख से अधिक पुरानी फाइलें 'के लिए पूछता है, लेकिन शरीर' एक निश्चित तिथि के बाद संशोधित 'बताता है। मैं एक विशिष्ट तिथि की तुलना में 'के बाद' की नई व्याख्या करता हूं, पुरानी नहीं।
जोफ्री

जवाबों:


19

यदि आपके पास केवल '-newer फ़ाइल' है तो आप इस समाधान को ले सकते हैं:

touch -t 201003160120 some_file
find . -newer some_file

आदमी स्पर्श:

  -t STAMP
          use [[CC]YY]MMDDhhmm[.ss] instead of current time

यह मानते हुए कि आपके स्पर्श में यह विकल्प है (मेरा स्पर्श 5.97 है)।


48

नहीं, आप दिनांक / समय स्ट्रिंग का उपयोग कर सकते हैं।

से man find:

-newerXY संदर्भ
वर्तमान फ़ाइल के टाइमस्टैम्प को संदर्भ के साथ तुलना करता है। संदर्भ तर्क आम तौर पर एक फ़ाइल का नाम है (और इसकी टाइमस्टैम्प में से एक का उपयोग तुलना के लिए किया जाता है) लेकिन यह एक निरपेक्ष समय का वर्णन करने वाला एक स्ट्रिंग भी हो सकता है। X और Y अन्य अक्षरों के लिए प्लेसहोल्डर हैं, और ये पत्र चयन करते हैं कि तुलना के लिए किस समय संदर्भ का उपयोग किया जाता है।

          a   The access time of the file reference
          B   The birth time of the file reference
          c   The inode status change time of reference
          m   The modification time of the file reference
          t   reference is interpreted directly as a time

उदाहरण:

find -newermt "mar 03, 2010" -ls
find -newermt yesterday -ls
find -newermt "mar 03, 2010 09:00" -not -newermt "mar 11, 2010" -ls

5
मैं सेंटोस 5.2 का उपयोग कर रहा हूं, जो GNU फाइंड वर्जन 4.2.27 का उपयोग करता है, और यह "-newer फाइल" के अलावा -newermt या किसी -newer पैरामीटर का समर्थन नहीं करता है
DrStalker

1
GNU खोज 4.3.3 और नए समर्थन -newerXY के अनुसार Savannah.gnu.org/bugs/?11668
फिलिप

25

सीधे सवाल से संबंधित नहीं है, लेकिन कुछ के लिए दिलचस्प हो सकता है जो यहां ठोकर खाते हैं।

ढूँढें कमांड कुछ आवश्यक तिथि से पुरानी फ़ाइलों को खोजने के लिए सीधे-फ़ोल्डर पैरामीटर का समर्थन नहीं करता है, लेकिन आप नकारात्मक कथन (स्वीकृत उत्तर उदाहरण का उपयोग करके) का उपयोग कर सकते हैं:

touch -t 201003160120 some_file
find . ! -newer some_file

प्रदान की गई तारीख से अधिक पुरानी फाइलें लौटाएगा ।


3
संपादकों - शायद इसे स्वीकृत उत्तर में मिला दिया जाना चाहिए?
nEJC

यह समाधान इस तरह के मुद्दे को हल करने का सबसे सुरुचिपूर्ण तरीका है :)
लैबिनोकल

9
find <dir> -mtime -20

यह खोज कमांड पिछले 20 दिनों के भीतर संशोधित फ़ाइलों को खोजेगी।

  • mtime -> संशोधित (Atime = पहुंच, ctime = निर्मित)
  • -20 -> 20 दिन से अधिक पुराना (20 बिल्कुल 20 दिन, 20 दिनों से अधिक +20)

आप अतिरिक्त सीमाएँ जोड़ सकते हैं जैसे:

find <dir> -mtime -20 -name "*.txt"

पहले जैसा ही है, लेकिन केवल '.txt' के साथ समाप्त होने वाली फ़ाइलों को पाता है।


5

बस जोड़ने के लिए - आप एक समय अंतराल में खोज करने के लिए दो newermt तर्कों का उपयोग कर सकते हैं:

find ! -newermt "apr 01 2007" -newermt "mar 01 2007" -ls

मार्च 2007 से सभी फ़ाइलों को खोजने के लिए।


1

आप इस तरह से एक स्क्रिप्ट का उपयोग कर सकते हैं

#!/bin/bash

if [ $# -ne 1 ];then
  when="today"
else
  when=` date -d "$1" +"%s" `
fi
now=`date +"%s"`

seconds=`echo "$when - $now" | bc`
minutes=`echo "$seconds / 60 " | bc `

find . -cmin $minutes -print

अपने $ PATH में इसे "newerthan" के रूप में सहेजें और इसे निष्पादन योग्य बनाएं।

तो आप इस तरह एक निश्चित तारीख के बाद संशोधित फ़ाइल पा सकते हैं:

newerthan "2010-03-10"

या

newerthan "last year"

या

newerthan "yesterday"

वही करना चाहिए जो आप चाहते हैं। मुझे नहीं लगता कि इसे प्राप्त करने के लिए कोई रास्ता है या नहीं।


यह bcपूर्णांक गणित के लिए उपयोग करने के लिए आवश्यक नहीं है , बैश यह कर सकता है:, ((seconds = when - now))प्रारूप तर्क dateमें एक प्लस होना चाहिए date +%sऔर कुछ सिस्टम में नहीं हो सकता हैdate -d
अगले नोटिस तक रोक दिया गया।

यह सेंटोस 5.2 के लिए है। जिसके पास -d है। हालांकि पूर्णांक गणित के बारे में जानने के लिए उपयोगी है।
रिचर्ड होलोवे

1
find ! -newermt “<DATE>”

इस तरह:

find ! -newermt “jan 01 2015” 

यह आपको आपकी वर्तमान निर्देशिका में 01-01-2015 से अधिक पुरानी फाइलें देगा।

https://muzaffarmahmoodblog.wordpress.com/2019/07/11/linux-command-to-remove-files-older-than-2015-in-a-directory/


मैं सर्वरफॉल्ट पर आपका स्वागत करते हुए एक टिप्पणी लिखने वाला था और आपसे एक दोहराव जवाब देने पर पुनर्विचार करने के लिए कह रहा था, जब तक कि मुझे यह पता नहीं चला कि प्रश्न शीर्षक और शरीर अलग-अलग बातें कहते हैं: शीर्षक 'तारीख से पुरानी फाइलें>' के लिए पूछता है और प्रश्न में संशोधन किया गया है। एक निश्चित तारीख के बाद ', जो मेरी राय में दो अलग चीजें हैं। हो सकता है कि आप अपनी पोस्ट में अंतर स्पष्ट कर सकें और नकारात्मक के उपयोग को समझा सकें। योगदान के लिए धन्यवाद और मैं स्पष्टीकरण के लिए सवाल पर एक टिप्पणी पोस्ट करूंगा। योगदान के लिए धन्यवाद!
जोफ्री

0

यदि आपकी तिथि ऐसी है जो तुलना के लिए ठीक है,

mydate=201003160120
find . -type f -printf "%AY%Am%Ad%AH%AM%AS/:%p\n" | awk -vd="$mydate" -F'/:' '$1 > d{ print $2 }'
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.