मेरे पास एक ऐसी प्रक्रिया है जो क्रमिक रूप से निर्देशिकाएं बनाती है, उनके लिए आरोही क्रम में एक सूचकांक प्रदान करती है, और अंतिम-पुनरावृत्ति निर्देशिका में परिणामों को संग्रहीत करती है, सबसे बड़ा सूचकांक। यह देखते हुए कि प्रक्रिया को पूरा करने के लिए आवश्यक पुनरावृत्तियों की संख्या प्रति डेटा सेट में भिन्न होती है, मैं अंतिम निर्देशिका के सूचकांक की भविष्यवाणी नहीं कर सकता। उदाहरण के लिए:
#Dataset 1 may produce
ls -d Dir*
... Dir4 Dir5
तथा
#Dataset 2 may produce
ls -d Dir*
... Dir34 Dir35
मैंने अनुमान लगाया कि मैं बना सकता हूं और एरे को शामिल कर सकता हूं जिसमें सभी निर्देशिकाओं का नाम है, अंतिम की प्रतिलिपि बनाएं और सभी निर्देशिकाओं को हटा दें
ARR=($(ls -d Dir*))
cp ${ARR[@]:(-1)} LastDirectory #Preserve my results in LastDirectory
rm Dir*
लेकिन यह निश्चित रूप से पैर में खुद को गोली मारने का एक तरीका है। मान लीजिए कि कार्यक्रम को समाप्त करने के लिए दस पुनरावृत्तियों लगते हैं। फिर, Dir10 में मेरे परिणाम होंगे। अगर मैं निर्देशिकाओं को सूचीबद्ध करता हूं और उन्हें सरणी में पास करता हूं, तो Dir10 अंतिम स्थिति में नहीं होगा और इसे समाप्त कर दिया जाएगा। यह उस तरह का अप्रत्याशित व्यवहार है जिससे मैं बचना चाहता हूँ!
#You can copy-paste this piece of code to replicate the problem:
mkdir Dir1 Dir2 Dir3 Dir4 Dir5 Dir6 Dir7 Dir8 Dir9 Dir10
ls -d Dir*
Dir1 Dir10 Dir2 Dir3 Dir4 ... Dir8 Dir9
ARR=($(ls -d Dir*))
echo ${ARR[@]:(-1)}
Dir9
वहाँ सबसे बड़ी सूचकांक के साथ छोड़कर सभी निर्देशिकाओं से छुटकारा पाने का एक तरीका है?
नोट: मैंने निर्देशिका निर्माण तिथियों का उपयोग करने के बारे में सोचा था, लेकिन ऐसा लगता है कि यह विकल्प लिनक्स में समर्थित नहीं है।
ls -t।