find
विशिष्ट तिथि पर बनाई गई फ़ाइलों की खोज के लिए मैं UNIX कमांड का उपयोग कैसे करूं ?
find
विशिष्ट तिथि पर बनाई गई फ़ाइलों की खोज के लिए मैं UNIX कमांड का उपयोग कैसे करूं ?
जवाबों:
जैसा कि मैक्स द्वारा बताया गया है, आप नहीं कर सकते हैं, लेकिन संशोधित या एक्सेस की गई फ़ाइलों की जांच करना यह सब कठिन नहीं है। मैंने इस बारे में एक ट्यूटोरियल लिखा था , जैसे कि आज। जिसका सार उपयोग करना है -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' सामान्य रूप से निर्माण तिथि के अनुरूप होगा, हालाँकि।
-newerBt
फ़ाइल के जन्म (निर्माण) समय पर मेल खाएगा ।
-newerxt
पर उपलब्ध है (जहां यह 1998 में पहली बार पैच के रूप में प्रदान किया गया था), कुछ अन्य BSD और GNU (2007 में 4.3.3 के बाद से), HP / UX खोज पर आधारित है, जो पेश किया गया (लेकिन जहां Y == t समर्थित नहीं है)। -newerXY
find location -ctime time_period
Time_period के उदाहरण:
30 से अधिक दिन पहले: -ctime +30
कम से कम 30 दिन पहले: -ctime -30
ठीक 30 दिन पहले: -ctime 30
ctime
निर्माण के समय के साथ कुछ नहीं करना है , यह इनोड परिवर्तन समय है।
यह दो चरण हैं, लेकिन मैं इसे इस तरह करना चाहता हूं:
पहले किसी विशेष तिथि / समय के साथ एक फ़ाइल बनाएँ। इस स्थिति में, फ़ाइल आधी रात को 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
find
अभाव का समाधान है-newerXY
आप ऐसा कर सकते हैं:
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
stat
अगर आपके पास नहीं है find -printf
।
आप नहीं कर सकते। -C स्विच आपको बताता है कि कब परमिशन बदली गई थी, -एक सबसे हाल के एक्सेस टाइम का परीक्षण करता है, और -मैं मॉडिफिकेशन टाइम का परीक्षण करता है। लिनक्स के अधिकांश जायकों (ext3) द्वारा उपयोग किया जाने वाला फाइलसिस्टम "निर्माण समय" रिकॉर्ड का समर्थन नहीं करता है। माफ़ करना!
@ मोम: निर्माण के समय के बारे में सही है।
हालांकि, अगर आप में से एक के लिए बीते दिनों तर्क गणना करना चाहते हैं -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
।
मुझे यह स्क्रिप्ट एक स्क्रिप्ट में मिली, जो 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 आदि मापदंडों की तलाश में आपको यहाँ मदद मिलेगी।