POSIX के पास इस ls -lसूची में तारीखों के बारे में कहने के लिए है :
<date and time>क्षेत्र द्वारा उचित समय है और जब फ़ाइल अंतिम बार संशोधित किया गया था की टाइमस्टैम्प शामिल होगा। POSIX लोकेल में, फ़ील्ड निम्न दिनांक कमांड के आउटपुट के बराबर होगी:
date "+%b %e %H:%M"
... यदि फ़ाइल को पिछले छह महीनों में संशोधित किया गया है, या:
date "+%b %e %Y"
इसे ध्यान में रखते हुए, और यह सुनिश्चित करने के लिए कि अगर किसी फ़ाइल नाम में कोई नई सीमाएँ हैं, तो वे भी POSIX निर्दिष्ट ls -qविकल्प के साथ ग्लोबेड हैं , तो lsपरिणाम के लिए एक रेगेक्स तैयार करना अपेक्षाकृत आसान है find:
d=$(date "+%b %e") y=$(date --date=yesterday "+%b %e")
echo "$d" "$y"
###OUTPUT###
Jul 5 Jul 4
grepउसके लिए और आप केवल उन पंक्तियों को वापस करेंगे जिनमें आज या कल की तारीखों का प्रतिनिधित्व करने वाले तार हैं। निम्न कमांड उस में थोड़ा जोड़ता है:
ls -alRcq | sed "1H;/^-/!{/./d;N;h};/$d\|$y/!d;x;/\n/p;g"
ls विकल्प से मिलकर बनता है:
-a निर्देशिका में सभी फ़ाइलों को वापस लौटाएँ - उनमें से जो एक के साथ शुरू होती हैं .dot
-l लंबी सूची
-R पुनरावर्ती सभी बच्चे निर्देशिकाओं को सूचीबद्ध करें
-c पहुँच समय के बजाय संशोधन समय प्रदर्शित करें
-qफ़ाइल नाम में ?गैर-मुद्रण योग्य या \tab वर्णों के बजाय शेल ग्लोब लौटाएं
उन परिणामों को |pipeफाइल पर पास किया जाता है sedजो केवल मेल खाते हैं:
- रिक्त लाइन एक पथनाम और निम्न लाइन से पहले
- लाइन्स की शुरुआत
- (दूसरे शब्दों में - dडायरेक्टरी के लिए नहीं ) जिसमें आपकी भी होती है date।
- यह पथनाम लाइनों को तब तक प्रिंट नहीं करता है जब तक कि निर्देशिका में उनका नाम वास्तव में आपके लिए फ़िल्टर की गई फ़ाइलों में न हो।
आउटपुट इस तरह दिखता है:
ls -alRcq --color=always |
sed "1H;/^-/!{/./d;N;h};/$d\|$y/!d;x;/\n/p;g"
###OUTPUT###
.:
-rw------- 1 mikeserv mikeserv 2086 Jul 4 10:52 .bash_history
-rw------- 1 mikeserv mikeserv 2657 Jul 4 15:20 .lesshst
-rw-r--r-- 1 mikeserv mikeserv 681 Jul 5 05:18 .zdirs
-rw------- 1 mikeserv mikeserv 750583 Jul 5 08:28 .zsh_history
-rw-r--r-- 1 mikeserv mikeserv 166 Jul 4 23:02 Terminology.log
-rw-r--r-- 1 mikeserv mikeserv 433568 Jul 4 13:34 shot-2014-06-22_17-10-16.jpg
-rw-r--r-- 1 mikeserv mikeserv 445192 Jul 4 13:34 shot-2014-06-22_17-11-06.jpg
./.cache/efreet:
-rw------- 1 mikeserv mikeserv 37325 Jul 4 22:51 desktop_localhost_C.eet
-rw------- 1 mikeserv mikeserv 37325 Jul 4 23:30 desktop_localhost_en_US.eet
-rw------- 1 mikeserv mikeserv 24090 Jul 4 22:51 desktop_util_localhost_C.eet
-rw------- 1 mikeserv mikeserv 24090 Jul 4 23:30 desktop_util_localhost_en_US.eet
-rw------- 1 mikeserv mikeserv 16037 Jul 4 23:30 icon_themes_localhost.eet
-rw------- 1 mikeserv mikeserv 3117 Jul 4 23:30 icons___efreet_fallback_localhost.eet
-rw------- 1 mikeserv mikeserv 768039 Jul 4 23:30 icons_gnome_localhost.eet
-rw------- 1 mikeserv mikeserv 18589 Jul 4 23:30 icons_hicolor_localhost.eet
./.config:
-rw-r--r-- 1 mikeserv mikeserv 30 Jul 4 19:10 pavucontrol.ini
./.config/chrome:
-rw-r--r-- 1 mikeserv mikeserv 94332179 Jul 4 13:36 conf.tar.lz4.bak
हाँ, यह भी साथ काम करता है LS_COLORS- जो आपके cronपाठ्यक्रम के लिए शायद कम प्राथमिकता है , लेकिन, आपके विकल्प खुले हैं।
किसी भी मामले में यह कुछ अन्य संभावित समाधानों पर कुछ महत्वपूर्ण लाभ प्रदान करता है।
पहली जगह में find+ lsकई चालान शामिल हैं - इसमें केवल एक ही lsप्रक्रिया शामिल है , और यही कारण है कि यह मज़बूती से सब कुछ छाँटने में सक्षम है - जो यह डिफ़ॉल्ट रूप से करता है - और इसलिए sortइसे सहायक भी बनाया जाता है।
किसी भी समाधान को शामिल findऔर sortऔर lsकाफी कर रही है सभी दो बार काम का। lsऔर findदोनों हर pathname और statहर फ़ाइल को हल करेंगे । lsऔर sortदोनों सभी परिणामों को क्रमबद्ध करेंगे। यह केवल एकल का उपयोग करने के बजाय शायद सबसे अच्छा है ls।
तो ज़ाहिर है वहाँ dateऔर sedइस उत्तर के कुछ भागों। इस बात पर ध्यान देना ज़रूरी है कि आप कठिन भाग करते हैं और पहले regex प्राप्त करते हैं - और केवल एक बार - और बाद में आप केवल कहने के बजाय परिणामों की एक ही सूची prune करते हैं, परिणाम प्राप्त करते हैं, परिणाम प्राप्त करते हैं, परिणाम और क्रमबद्ध परिणाम प्राप्त करते हैं।
यह नए नाम वाले फ़ाइलनामों पर नहीं टूटता, जैसा कि अन्य समाधानों में होगा। इस समाधान के पास अपने स्वयं के कैविएट हैं - जिन्हें मैं आगे समझाता हूं - लेकिन वे मिनट हैं और आसानी से नियंत्रित होते हैं। मेरी राय में, यह यहां सबसे मजबूत समाधान है।
ऐसे दो मामले हैं जिनमें उपरोक्त आदेश से आपको समस्या हो सकती है। पहले में ?फिल्नाम में ग्लब्स शामिल हैं - जबकि यह पहले से ही यहां पेश किए गए किसी भी अन्य की तुलना में अधिक मजबूत समाधान है, और इस बात की संभावना है कि आप ?सभी का सामना अपने आप में काफी छोटा है, इस बात की संभावना है कि उन ग्लोब को हल करने की संभावना है। एक से अधिक फ़ाइल नाम से मेल खा सकता है। कृपया इस विषय पर अधिक जानकारी के लिए इसे देखें ।
दूसरी संभावना में एक गलत सकारात्मक शामिल है - उदाहरण के लिए यदि आपके पास एक फ़ाइलनाम है जो वास्तव में उस dateस्ट्रिंग से मेल खाता है जिसके लिए हम खोज कर रहे हैं grepलेकिन यह वास्तव में उन दिनों में से किसी पर भी संशोधित नहीं किया गया था। मैं इस बात पर भरोसा नहीं कर रहा हूं कि यह एक मुद्दा है, लेकिन, अगर यह है, तो इसके बारे में पूछें और मैं शायद इसे संभालने के लिए रेक्स को अधिक विशिष्ट बनाने में आपकी मदद कर सकता हूं।
ls -ls **/*(.)