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, om
sắ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 N
nế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 parent
khô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}'