Обязательный зш ответ:
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}'