Catatan tentang keandalan:
Karena karakter baris baru sama validnya dengan nama file, solusi apa pun yang bergantung pada baris seperti yang berbasis head/ tailcacat.
Dengan GNU ls, opsi lain adalah menggunakan --quoting-style=shell-alwaysopsi dan basharray:
eval "files=($(ls -t --quoting-style=shell-always))"
((${#files[@]} > 0)) && printf '%s\n' "${files[0]}"
(tambahkan -Aopsi lsjika Anda juga ingin mempertimbangkan file tersembunyi).
Jika Anda ingin membatasi ke file biasa (abaikan direktori, fifos, perangkat, symlink, soket ...), Anda harus beralih ke GNU find.
Dengan bash 4.4 atau yang lebih baru (untuk readarray -d) dan GNU coreutils 8.25 atau yang lebih baru (untuk cut -z):
readarray -t -d '' files < <(
LC_ALL=C find . -maxdepth 1 -type f ! -name '.*' -printf '%T@/%f\0' |
sort -rzn | cut -zd/ -f2)
((${#files[@]} > 0)) && printf '%s\n' "${files[0]}"
Atau secara rekursif:
readarray -t -d '' files < <(
LC_ALL=C find . -name . -o -name '.*' -prune -o -type f -printf '%T@%p\0' |
sort -rzn | cut -zd/ -f2-)
Yang terbaik di sini adalah menggunakan zshdan kualifikasi globalnya alih-alih bashmenghindari semua kerumitan ini:
File reguler terbaru di direktori saat ini:
printf '%s\n' *(.om[1])
Termasuk yang tersembunyi:
printf '%s\n' *(D.om[1])
Terbaru kedua:
printf '%s\n' *(.om[2])
Periksa usia file setelah resolusi symlink:
printf '%s\n' *(-.om[1])
Secara rekursif:
printf '%s\n' **/*(.om[1])
Juga, dengan sistem penyelesaian ( compinitdan co) diaktifkan, Ctrl+Xmmenjadi pelengkap yang memperluas ke file terbaru.
Begitu:
vi Ctrl+Xm
Akan membuat Anda mengedit file terbaru (Anda juga mendapatkan kesempatan untuk melihatnya sebelum Anda menekan Return).
vi Alt+2Ctrl+Xm
Untuk file terbaru kedua.
vi * .cCtrl+Xm
untuk cfile terbaru .
vi * (.)Ctrl+Xm
untuk file reguler terbaru (bukan direktori, atau fifo / perangkat ...), dan sebagainya.
watch -n1 'ls -Art | tail -n 1'- menunjukkan file terakhir