2012-12-22 17 views
7

का उपयोग करके फ़ाइलों को नाम से सॉर्ट करने के लिए कैसे करें मैं सभी फ़ाइलों को शेल स्क्रिप्ट के साथ सॉर्ट करना चाहता हूं।शैल स्क्रिप्ट

उदाहरण के लिए, /Users/KanZ/Desktop/Project/Test/ में M1.h, A2.h और F4.h फ़ाइलें हैं।

प्रत्येक फ़ाइल में एक अलग समय है। मैं इन सभी फ़ाइलों को दिनांक और समय से सबसे पुराने से वर्तमान में कैसे क्रमबद्ध करूं?

वर्तमान में मैं एक नाम बदलने स्क्रिप्ट है:

cd /Users/KanZ/Desktop/Project/Test/ 
n=1 
for file in *.jpg; 
do 
    echo $file prefix=M file_name=M$n.jpg 
    echo $file_name n=$(($n+1)) 
    mv $file $file_name 
done 

पहली बार मैं स्क्रिप्ट चलाने JPG फ़ाइलें M1.jpg, M2.jpg और M3.jpg हो जाएगा लेकिन अगर मैं इस निर्देशिका के लिए एक नया नाम की फ़ाइल A1.jpg जोड़ सकते हैं और स्क्रिप्ट चलाने दोबारा, M1.jpg, M2.jpg और M3.jpgM4.jpg द्वारा प्रतिस्थापित किया जाएगा (स्क्रिप्ट चलाने से पहले, इस फ़ाइल को A1.jpg नाम दिया गया था) क्योंकि पहला अक्षर A है और M से पहले आया था।

मैं M1, M2, M3 और M4.jpg प्राप्त करना चाहता हूं।

+0

प्रश्न मध्य-प्रवाह बदल गया। यह '* .h' फ़ाइलों को सॉर्ट करना शुरू कर दिया लेकिन टिप्पणी और कोड '* .jpg' फ़ाइलों को सॉर्ट करने पर प्रतिबिंबित करता है। प्रश्न पूछते समय संगति महत्वपूर्ण है। –

उत्तर

10

ls आदेश कर सकते हैं आसानी से तरह अंतिम संशोधित समय से:

$ ls -1tr /Users/KanZ/Desktop/Project/Test 

1 सहित उत्पादन प्रत्येक पंक्ति में एक फाइल करने के लिए ls बताता है:

$ ls -1t /Users/KanZ/Desktop/Project/Test 

तरह उलटने के लिए, -r विकल्प शामिल बिना अतिरिक्त मेटाडाटा (लंबाई, संशोधन समय, आदि) के बिना, जो अक्सर आपको शेल स्क्रिप्ट में चाहिए, यदि आपको आगे की प्रक्रिया के लिए अन्य आदेशों में सूची भेजने की आवश्यकता है।

+0

इस तरह के नए से पुराने - यह नहीं पूछा गया था। –

+0

फिर ऑर्डर बदलने के लिए उपयुक्त '-r' ध्वज का उपयोग करें। –

3

(पूरी तरह से नया है, क्योंकि सवाल परिवर्तित)

इस प्रयास करें:

cd /Users/KanZ/Desktop/Project/Test 
n=1 
for f in `ls -tr *.jpg`; do 
    mv $f M$n.jpg 
    n=$((n + 1)) 
done 
+0

कुछ भी खुश नहीं है। क्या आपको फाइलों के प्रकार निर्दिष्ट नहीं करना चाहिए? उदा। *। एच *।jpg – kantawit

+0

आपने क्या प्रयास किया? इसका परिणाम क्या है? (फ़ाइल के प्रत्यय को निर्दिष्ट करने की कोई आवश्यकता नहीं है: यदि नहीं दिया गया है, तो सभी फाइलें दिखायी जाती हैं।) –

+0

मैं जेपीजी फ़ाइलों को पहले समय और तारीख के अनुसार सॉर्ट करना चाहता हूं, उसके बाद मैं उनका नाम बदलना चाहता हूं जैसे A1.jpg A2.jpg A3.jpg। अब मैं सभी फाइलों का नाम बदल सकता हूं लेकिन मैं उन्हें नाम बदलने से पहले पुराने से वर्तमान में सॉर्ट करना चाहता हूं। – kantawit

0

मामले में अगर आप

ls -tUr -d $PWD/* 

उपयोगी हो सकता है आरोही क्रम में फ़ाइल पथ सॉर्ट करने के लिए की जरूरत है

0

आपको -t विकल्पपर पास करने की आवश्यकता हैकमांड -t विकल्प संशोधित समय के अनुसार, यानी लेक्सिकोोग्राफिक क्रम द्वारा ऑपरेंड को सॉर्ट करने से पहले सबसे हाल ही में संशोधित किया गया है। दूसरे शब्दों में, अंतिम डाउनलोड फ़ाइल को निम्न आदेश का उपयोग करके प्रदर्शित किया जा सकता है।

टर्मिनल खोलें और निम्न आदेश टाइप करें।

ls -t 
संबंधित मुद्दे