2013-02-05 11 views
13

में किसी विशिष्ट सेट के लिए फ़ाइलों को खोजने के लिए ls का उपयोग कैसे करें मेरे पास निर्देशिका में फ़ाइलों का एक सेट है। मुझे विशिष्ट तिथियों के सेट के लिए फाइलें ढूंढनी होंगी (उदाहरण के लिए यदि मुझे 16 जनवरी से 20 जनवरी तक फाइलों की आवश्यकता है)। मैंने ls -ltr | grep <date> का उपयोग करने की कोशिश की लेकिन फाइलों को चुनने के लिए यह बहुत से कदम उठा रहा है। क्या ऐसा करने का कोई आसान तरीका है। धन्यवाद!यूनिक्स

+0

Shash, स्वीकार किए जाते हैं जवाब के बारे में एक थिंक है, मुझे लगता है कि खोजने के काम के लिए एक बेहतर उपकरण हो सकता है। – paxdiablo

+0

@paxdiablo ठीक है, यह भी कोशिश करेगा कि – Shash

उत्तर

20

मुझे यकीन है कि कितने फ़ाइलें आप में है नहीं कर रहा हूँ अपने निर्देशिका लेकिन कुछ इस तरह blindingly उपवास किया जाना चाहिए:

ls -al | awk '$6 == "Jan" && $7 >= 16 && $7 <= 20 {print $9}' 

अपने सिस्टम पर, मैं दिनांक थोड़ा संशोधित साथ निम्न देखें :

pax> ls -al | awk '$6 == "Jan" && $7 >= 16 && $7 <= 29 {print $9}' 
kids_shares.ods 
our_savings.gnumeric 
photos 

pax> ls -ald kids_shares.ods our_savings.gnumeric photos 
-rw-r--r-- 1 pax pax 51005 Jan 29 19:39 kids_shares.ods 
-rw-r--r-- 1 pax pax 2275 Jan 28 14:48 our_savings.gnumeric 
drwxrwxrwx 130 pax pax 4096 Jan 29 21:47 photos 

आप देख सकते हैं कि तिथियां दी गई फ़ाइलों के लिए मेल खाते हैं।

यह देखने के लिए एक बात यह है कि: यदि फ़ाइल हाल ही में है, तो इसमें कॉलम 8 में समय होगा। कुछ उम्र से परे, ls वर्ष को वहां डालना शुरू कर देता है। मेरे पास अस्पष्ट याद है कि यह छह महीने की सीमा के आसपास कहीं है लेकिन मैं बिल्कुल निश्चित नहीं हूं। आपको इसके लिए भी पूरा करने की आवश्यकता होगी।

+1

बहुत अच्छा काम किया ... – Shash

9

इसके बजाय find(1) का उपयोग करें, यह बहुत आसान होगा।

find . -mtime -$start -mtime +$end 
+0

'ढूंढ' में 'नया' ध्वज है (यह देखने के लिए कि यह किसी अन्य फ़ाइल से नया है या नहीं) लेकिन दुर्भाग्य से'ल्डर 'नहीं है। मुझे यकीन नहीं है कि यह इन विशिष्ट तारीख सीमाओं के लिए उपयुक्त है। – paxdiablo

+0

@paxdiablo यह उपयुक्त है, मैंने अभी एक उदाहरण जोड़ा है (भी, ढूंढें '!' (नहीं) ऑपरेटर है) – wich

+0

ओह, मैंने इसके बारे में नहीं सोचा था। अच्छा निर्णय। – paxdiablo

7

आप find का उपयोग कर बेहतर हैं। विशिष्ट समय के साथ खोजने के लिए विशिष्ट समय के साथ दो temp फ़ाइलों को बनाकर शुरू करें। touch ऐसा कर सकते हैं:

touch -t "201301160001" ./start 
touch -t "201301202359" ./finish 

फिर find चलाएँ:

find /path/to/files -type f -newer ./start ! -newer ./finish 
+0

असल में, इन दोनों खोज-आधारित समाधान शायद मेरे से बेहतर हैं - अगर आप उपनिर्देशिका में नहीं जाना चाहते हैं तो अधिकतम अधिकतम उपयोग करने की आवश्यकता हो सकती है। दोनों के लिए +1। – paxdiablo

+0

@paxdiablo: धन्यवाद दोस्त। मैंने पारस्परिक रूप से पारित किया क्योंकि (हालांकि मैं 'ls' आउटपुट को पार्स नहीं करना पसंद करता हूं) OP _did_ ऐसा करना चाहता था, और 'awk' एक अच्छा विकल्प था। – Steve

+0

यह मेरे लिए इंटरैक्टिव रूप से बहुत अच्छा काम करता है लेकिन स्क्रिप्ट में उपयोग किए जाने पर कोई परिणाम नहीं देता है (या तो '।/Script.sh',' bash script.sh' या 'source script.sh' के साथ)। मुझे लगता है कि यह बैंग के साथ करना है; जब मैं डीबग करने के लिए 'bash -x' का उपयोग करता हूं, तो यह सिंगल कोट्स से घिरा हुआ है; कमांड चलाने से इस तरह कुछ भी नहीं आता है। – rensa