Dalam sebuah direktori, saya memiliki file-file berikut:
myfile_v01.txt
myfile_v02.txt
myfile_v03.txt
Bagaimana cara membuat skrip bash yang mendeteksi nilai versi terakhir dan memasukkan nama file versi terakhir ini ke dalam variabel?
Tidak terlalu halus tetapi tampaknya fungsional:
var = $ (ls | sort -V | tail -n 1)
Kemudian Anda memiliki file terakhir yang disimpan $var
Berikut adalah solusi yang menggunakan globbing (jadi tidak bergantung pada parsing ls ), seperti solusi terdon pertama, tetapi tidak perlu mengulangi semua file:
Pertama, semua file yang cocok dibaca ke dalam array. Kemudian, elemen terakhir dari array ditugaskan untuk
$lastfile
. Akhirnya, array tidak diperlukan lagi, sehingga bisa dihapus.Sayangnya,
bash
(setidaknya untuk pengetahuan saya) tidak mendukung menyortir hasil dari globbing # , jadi contoh ini bekerja dengan baik dengan Anda skema penamaan yang diberikan (tepat dua digit, juga untuk versi <10), tetapi akan gagal untukmyfile_v1.txt
,myfile_v2.txt
, .. .,myfile_v10.txt
.#
zsh
(tentu saja;)
) tidak, jadizsh% myfiles=(myfile_v*(n)); lastfile="${myfiles[-1]}"; unset myfiles
tidak akan menderita dari keterbatasan ini.sumber
Ada dua pendekatan yang jelas, Anda dapat mengurai nama file atau mencari file terbaru:
Parsing nama file, ini mengasumsikan semua file diberi nama seperti pada contoh Anda:
Dapatkan file terbaru (dengan asumsi nama file yang relatif waras yang tidak mengandung baris baru)
sumber
-t
) dalam urutan terbalik (-r
) sehingga file terakhir adalah yang terbaru