अप्रत्यक्ष zsh उत्तर:
latest_directory=(parent/*(/om[1]))
कोष्ठक में पात्र ग्लोब क्वालिफायर हैं : /
केवल निर्देशिकाओं का मिलान करने के लिए, om
बढ़ती उम्र के अनुसार मैच को सॉर्ट करने के लिए, और [1]
केवल पहले (यानी नवीनतम) मैच को बनाए रखने के लिए। जोड़ें N
आप एक खाली सरणी प्राप्त करना चाहते हैं, तो (सामान्य रूप से आप एक 1-elementy सरणी मिल) का कोई उपनिर्देशिका है तो parent
।
वैकल्पिक रूप से, यह मानते हुए कि parent
कोई भी गोलाकार पात्र नहीं है:
latest_directory='parent/*(/om[1])'; latest_directory=$~latest_directory
यदि आपके पास zsh नहीं है, लेकिन आपके पास हाल ही में GNU टूल (यानी गैर-एम्बेडेड लिनक्स या सिग्विन) हैं, तो आप उपयोग कर सकते हैं find
, लेकिन यह बोझिल है। यहाँ एक तरीका है:
latest_directory_inode=$(find parent -mindepth 1 -maxdepth 1 -type d -printf '%Ts %i\n' | sort -n | sed -n '1 s/.* //p')
latest_directory=$(find parent -maxdepth 1 -inum "$latest_directory_inode")
इसके साथ एक सरल उपाय है ls
, जो तब तक काम करता है जब तक कि कोई निर्देशिका नाम में newlines या (कुछ सिस्टम पर) गैर-मुद्रण योग्य वर्ण शामिल न हों:
latest_directory=$(ls -td parent/*/ | head -n1)
latest_directory=${latest_directory%/}
ls -ltr ./parent | grep '^d' | tail -1| awk '{print $NF}'