Zorunlu zsh cevabı:
latest_directory=(parent/*(/om[1]))
Parantez içindeki karakterler glob niteleyicileridir : /
yalnızca dizinleri eşleştirmek, om
yaşları artırarak eşleşmeleri sıralamak ve [1]
yalnızca ilk (yani en yeni) eşleşmeyi korumak. Ekle N
Boş bir dizi almak istiyorsanız hiçbir alt dizin varsa (normalde 1-elementy dizisi olsun) parent
.
Alternatif olarak, parent
herhangi bir kabuk globbing karakteri içermediğini varsayarsak :
latest_directory='parent/*(/om[1])'; latest_directory=$~latest_directory
Zsh'iniz yoksa ancak son zamanlarda GNU araçlarınız varsa (yani gömülü olmayan Linux veya Cygwin) kullanabilirsiniz find
, ancak kullanışsızdır. İşte bir yol:
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
Hiçbir dizin adı yeni satır içermediği veya (bazı sistemlerde) yazdırılamayan karakterler içermediği sürece çalışan basit bir çözüm vardır :
latest_directory=$(ls -td parent/*/ | head -n1)
latest_directory=${latest_directory%/}
ls -ltr ./parent | grep '^d' | tail -1| awk '{print $NF}'