Wajib jawab zsh:
latest_directory=(parent/*(/om[1]))
Karakter dalam tanda kurung adalah kualifikasi global : /
untuk mencocokkan hanya direktori, om
mengurutkan pertandingan dengan bertambahnya usia, dan [1]
untuk mempertahankan hanya pertandingan pertama (yaitu yang terbaru). Tambahkan N
jika Anda ingin mendapatkan array kosong (biasanya Anda mendapatkan array 1-elemen) jika tidak ada subdirektori dari parent
.
Atau, dengan asumsi parent
tidak mengandung karakter globbing shell:
latest_directory='parent/*(/om[1])'; latest_directory=$~latest_directory
Jika Anda tidak memiliki zsh tetapi Anda memiliki alat GNU baru-baru ini (yaitu, Linux atau Cygwin yang tidak tertanam), Anda dapat menggunakan find
, tetapi ini rumit. Ini salah satu caranya:
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")
Ada solusi sederhana ls
, yang berfungsi selama tidak ada nama direktori yang mengandung baris baru atau (pada beberapa sistem) karakter yang tidak dapat dicetak:
latest_directory=$(ls -td parent/*/ | head -n1)
latest_directory=${latest_directory%/}
ls -ltr ./parent | grep '^d' | tail -1| awk '{print $NF}'