Bắt buộc trả lời zsh:
latest_directory=(parent/*(/om[1]))
Các ký tự trong ngoặc đơn là vòng loại toàn cầu : /chỉ khớp các thư mục, omsắp xếp các kết quả khớp theo độ tuổi tăng dần và [1]chỉ giữ lại kết quả khớp đầu tiên (tức là mới nhất). Thêm Nnếu bạn muốn lấy một mảng trống (thông thường bạn sẽ có được mảng 1 phần tử) nếu không có thư mục con của parent.
Ngoài ra, giả sử rằng parentkhông chứa bất kỳ ký tự vỏ nào:
latest_directory='parent/*(/om[1])'; latest_directory=$~latest_directory
Nếu bạn không có zsh nhưng bạn có các công cụ GNU gần đây (tức là Linux không nhúng hoặc Cygwin), bạn có thể sử dụng find, nhưng nó cồng kềnh. Đây là một cách:
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")
Có một giải pháp đơn giản với ls, hoạt động miễn là không có tên thư mục nào chứa dòng mới hoặc (trên một số hệ thống) các ký tự không in được:
latest_directory=$(ls -td parent/*/ | head -n1)
latest_directory=${latest_directory%/}
ls -ltr ./parent | grep '^d' | tail -1| awk '{print $NF}'