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
फ़ाइल नाम में ?
गैर-मुद्रण योग्य या \t
ab वर्णों के बजाय शेल ग्लोब लौटाएं
उन परिणामों को |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 **/*(.)