किसी विशिष्ट तिथि पर बनाई गई फ़ाइलों की खोज के लिए 'खोज' का उपयोग कैसे करें? [बन्द है]


254

findविशिष्ट तिथि पर बनाई गई फ़ाइलों की खोज के लिए मैं UNIX कमांड का उपयोग कैसे करूं ?


8
ऐसा लगता है जैसे बैश स्क्रिप्टिंग प्रश्नों की अनुमति है।
एलन

@MichaelScheper: मुझे यह भी नहीं पता कि उस टिप्पणी के साथ कहां से शुरू करें।
ऑर्बिट

1
@Notinlist: यहाँ उत्तर है: meta.stackexchange.com/questions/10249/… दुर्भाग्य से, यह समय सीमा समाप्त हो गई है। दया, क्योंकि वेब खोज अभी भी यहाँ उतरती है, और स्वीकृत उत्तर बहुत सारे लोगों के लिए मददगार था।
माइकल शेपर

@MichaelScheper: यदि आपको unix.stackexchange.com पर माइग्रेट करने के लिए वोट करने का विकल्प मिल सकता है, तो हर तरह से मुझे इसे इंगित करें। चूँकि आपके पास पास डायलॉग देखने के लिए रिपीट नहीं है, मैं आपको संकेत देता हूँ: कोई नहीं है। कम जुझारू होने पर विचार करें जब आपके पास कोई विचार नहीं है कि आप किस बारे में बात कर रहे हैं। ध्यान देने के लिए आपको धन्यवाद।
१०:१५ पर कक्षा

5
@LightnessRacesinOrbit: मैं 'जुझारू' के रूप में आने के लिए माफी माँगता हूँ। मुझे अपनी टिप्पणियों को संपादित करने की अनुमति नहीं है, लेकिन भविष्य के संदर्भ के लिए, क्या यह मेरी टिप्पणी थी जो इस प्रश्न की प्रशंसा कर रही थी जिसने आपको नाराज कर दिया था? मुझे कहना होगा, मैं अपनी पिछली टिप्पणी को संदेह का लाभ देने के बाद भी थोड़ा अंधा महसूस कर रहा हूं। मैं वास्तव में एक और 'मुझे भी' जोड़ने की तुलना में अधिक रचनात्मक होने की कोशिश कर रहा था, यह देखकर कि माइग्रेशन कैसे काम करता है: meta.stackexchange.com/a/10250/249555 60-दिन की समय सीमा उस विकल्प को छुपाती है, शायद? चूतड़ स्टीयर के लिए क्षमा करें। फिर से धन्यवाद - ईमानदारी से - अपने समय और ध्यान के लिए।
माइकल शेपर

जवाबों:


323

जैसा कि मैक्स द्वारा बताया गया है, आप नहीं कर सकते हैं, लेकिन संशोधित या एक्सेस की गई फ़ाइलों की जांच करना यह सब कठिन नहीं है। मैंने इस बारे में एक ट्यूटोरियल लिखा था , जैसे कि आज। जिसका सार उपयोग करना है -newerXYऔर ! -newerXY:

उदाहरण: 7 जून 2007 को संशोधित सभी फाइलों को खोजने के लिए:

$ find . -type f -newermt 2007-06-07 ! -newermt 2007-06-08

29 सितंबर, 2008 को एक्सेस की गई सभी फाइलों को खोजने के लिए:

$ find . -type f -newerat 2008-09-29 ! -newerat 2008-09-30

या, जिन फ़ाइलों की अनुमति थी, वे उसी दिन बदल गईं:

$ find . -type f -newerct 2008-09-29 ! -newerct 2008-09-30

यदि आप फ़ाइल पर अनुमतियाँ नहीं बदलते हैं, तो 'c' सामान्य रूप से निर्माण तिथि के अनुरूप होगा, हालाँकि।


7
मेरे खोज का संस्करण (GNU 4.2.32) -newerXY की भविष्यवाणी का समर्थन नहीं करता है। क्या किसी विशेष न्यूनतम संस्करण की आवश्यकता है? या यह एक विशेष कॉन्फ़िगर स्विच के साथ संकलन को खोजने का मामला है?
17

1
@yukondude: आप सही कह रहे हैं। मेरे पास स्थानीय रूप से खोजे जाने वाले संस्करण - जीएनयू 4.4.0 - है, जबकि 4.1.20 जो मेरे पास ड्रीमहोस्ट पर है। दो फ़ाइलों को बनाने के साथ कीचड़, हालांकि, दोनों में काम करना चाहिए।
Arve

1
कुछ सिस्टम (FreeBSD, OS / X ...) -newerBtफ़ाइल के जन्म (निर्माण) समय पर मेल खाएगा ।
स्टीफन चेजलस

3
ध्यान दें कि 2001 के बाद से FreeBSD-newerxt पर उपलब्ध है (जहां यह 1998 में पहली बार पैच के रूप में प्रदान किया गया था), कुछ अन्य BSD और GNU (2007 में 4.3.3 के बाद से), HP / UX खोज पर आधारित है, जो पेश किया गया (लेकिन जहां Y == t समर्थित नहीं है)। -newerXY
स्टीफन चेजलस

का उपयोग कर: खोज (GNU findutils) 4.4.0, यह वाक्यविन्यास SUSE ext3 पर काम नहीं करता है, अगर यह उस तिथि पर फ़ाइलों / w माइम को सूचीबद्ध करने वाला है, तो यह कुछ भी नहीं लौटाता है
niken

68

find location -ctime time_period

Time_period के उदाहरण:

  • 30 से अधिक दिन पहले: -ctime +30

  • कम से कम 30 दिन पहले: -ctime -30

  • ठीक 30 दिन पहले: -ctime 30


7
समस्या यह है कि मैं एक विशिष्ट तिथि के लिए परीक्षण करना चाहता हूं, एक समय अवधि के भीतर नहीं।
sverrejoh

1
तो यह पता करें कि कितने दिन पहले वह है और उस नंबर का उपयोग करें।
jmanning2k

15
ctimeनिर्माण के समय के साथ कुछ नहीं करना है , यह इनोड परिवर्तन समय है।
स्टीफन चेजेलस

47

यह दो चरण हैं, लेकिन मैं इसे इस तरह करना चाहता हूं:

पहले किसी विशेष तिथि / समय के साथ एक फ़ाइल बनाएँ। इस स्थिति में, फ़ाइल आधी रात को 2008-10-01 है

touch -t 0810010000 /tmp/t

अब हम उन सभी फ़ाइलों को पा सकते हैं जो उपरोक्त फ़ाइल से नई या पुरानी हैं (फ़ाइल संशोधित तिथि से जा रही हैं। आप एक्सेस और -newer के लिए -anewer का भी उपयोग कर सकते हैं। फ़ाइल की स्थिति बदल गई है)।

find / -newer /tmp/t
find / -not -newer /tmp/t

आप स्पर्श के साथ दो फ़ाइलें बनाकर कुछ तिथियों के बीच फ़ाइलों को भी देख सकते हैं

touch -t 0810010000 /tmp/t1
touch -t 0810011000 /tmp/t2

इससे दो तिथियों और समय के बीच की फाइलें मिलेंगी

find / -newer /tmp/t1 -and -not -newer /tmp/t2

3
+1 में एक पुराने के findअभाव का समाधान है-newerXY
फेलिप अल्वारेज़

1
IMO, अभी यह स्वीकृत समाधान होना चाहिए। मुझे 2.6.18-348.18.1.el5 कर्नेल पर चलने के लिए -newermt नहीं मिला, अकेले नए कर्नेल दें।
DarkForce

यहाँ DarkForce, newermt कार्यक्षमता बहुत ही विजयी प्रतीत होती है
niken

34

आप ऐसा कर सकते हैं:

find ./ -type f -ls |grep '10 Sep'

उदाहरण:

[root@pbx etc]# find /var/ -type f -ls | grep "Dec 24"
791235    4 -rw-r--r--   1 root     root           29 Dec 24 03:24 /var/lib/prelink/full
798227  288 -rw-r--r--   1 root     root       292323 Dec 24 23:53 /var/log/sa/sar24
797244  320 -rw-r--r--   1 root     root       321300 Dec 24 23:50 /var/log/sa/sa24

यह वही है जो ज्यादातर लोग चाहते हैं, लेकिन यह पर्याप्त उत्थान नहीं मिला !!!
साजा

2
यह एक निर्देशिका में कुछ मिलियन फाइलें होने पर काम नहीं कर सकता है।
डेनिस नोल्टे

3
यदि फ़ाइल नाम में grep खोज शब्द है तो साइड इफेक्ट्स हैं।
Snorex

mywiki.wooledge.org/ParsingLs - मशीन-पठनीय रूप में निर्माण तिथि को प्रिंट करने के लिए एक बेहतर तरीका है, शायद statअगर आपके पास नहीं है find -printf
ट्रिपलए

12

आप नहीं कर सकते। -C स्विच आपको बताता है कि कब परमिशन बदली गई थी, -एक सबसे हाल के एक्सेस टाइम का परीक्षण करता है, और -मैं मॉडिफिकेशन टाइम का परीक्षण करता है। लिनक्स के अधिकांश जायकों (ext3) द्वारा उपयोग किया जाने वाला फाइलसिस्टम "निर्माण समय" रिकॉर्ड का समर्थन नहीं करता है। माफ़ करना!


7
वास्तव में, यह सिर्फ फाइलसिस्टम प्रकार नहीं है - इस तरह की जानकारी प्राप्त करने के लिए कोई सिस्टम इंटरफ़ेस नहीं है, भले ही फाइल सिस्टम ने इसे आयोजित किया हो। यूनिक्स की कमियों में से एक शुरुआती दिनों में वापस जाना है, यही कारण है कि यूनिक्स कभी भी बंद नहीं होगा।
क्रिसडेन

1
यूनिक्स कभी नहीं ले जाएगा?
ल्यूसिड_ड्रीमर

8

@ मोम: निर्माण के समय के बारे में सही है।

हालांकि, अगर आप में से एक के लिए बीते दिनों तर्क गणना करना चाहते हैं -atime, -ctime, -mtimeमानकों, तो आपको निम्न अभिव्यक्ति का उपयोग कर सकते

ELAPSED_DAYS=$(( ( $(date +%s) - $(date -d '2008-09-24' +%s) ) / 60 / 60 / 24 - 1 ))

"2008-09-24" को आप जो भी तारीख और ELAPSED_DAYS चाहते हैं, उसे तब और आज के बीच के दिनों की संख्या पर सेट किया जाएगा। (अपडेट: एक के साथ संरेखित करने के लिए परिणाम से घटानाfind तारीख की गोलाई के ।)

इसलिए, 24 सितंबर, 2008 को संशोधित किसी भी फ़ाइल को खोजने के लिए, कमांड होगी:

find . -type f -mtime $(( ( $(date +%s) - $(date -d '2008-09-24' +%s) ) / 60 / 60 / 24 - 1 ))

यह काम करेगा यदि आपका संस्करण @Arve: के उत्तर में वर्णित विधेय का findसमर्थन नहीं करता है -newerXY


2

-Atime, -ctime, और -mtime स्विच के साथ, आप जो हासिल करना चाहते हैं, उसके करीब पहुंच सकते हैं।


-3
cp `ls -ltr | grep 'Jun 14' | perl -wne 's/^.*\s+(\S+)$/$1/; print $1 . "\n";'` /some_destination_dir

1
आप फाइलों की नकल क्यों कर रहे हैं? `ls ...`कार्यों में कमांड के अलावा , यह findटूल का उपयोग नहीं करता है।
यमनकेयो

-5

मुझे यह स्क्रिप्ट एक स्क्रिप्ट में मिली, जो 14 दिनों से अधिक पुरानी सभी फाइलों को हटा देती है:

CNT=0
for i in $(find -type f -ctime +14); do
  ((CNT = CNT + 1))
  echo -n "." >> $PROGRESS
  rm -f $i
done
echo deleted $CNT files, done at $(date "+%H:%M:%S") >> $LOG

मुझे लगता है कि थोड़ा अतिरिक्त "मैन फाइंड" और -ctime / -atime आदि मापदंडों की तलाश में आपको यहाँ मदद मिलेगी।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.