Обов’язковий відповідь zsh:
latest_directory=(parent/*(/om[1]))
Символи в дужках є глобальними класифікаторами : /порівнювати лише каталоги, omсортувати збіги за збільшенням віку та[1] зберігати лише перший (тобто найновіший) збіг. Додайте, Nякщо ви хочете отримати порожній масив (зазвичай ви отримуєте 1-елементний масив), якщо немає підкаталогу parent.
Крім того, якщо припустити, що parentвін не містить жодного символу , що складається з оболонки:
latest_directory='parent/*(/om[1])'; latest_directory=$~latest_directory
Якщо у вас немає zsh, але у вас є останні інструменти GNU (тобто невбудований Linux або Cygwin), ви можете використовувати 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, яке працює до тих пір, поки жодне ім'я каталогу не містить нових рядків або (у деяких системах) символів, які не можна друкувати:
latest_directory=$(ls -td parent/*/ | head -n1)
latest_directory=${latest_directory%/}
ls -ltr ./parent | grep '^d' | tail -1| awk '{print $NF}'