Обов’язковий відповідь 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}'