Saya mencoba menulis skrip untuk pekerjaan untuk mengotomatiskan beberapa pelaporan pada output. File-file Log (saat ini sedang 'dibakukan' di masa depan) disimpan dalam struktur jalur semacam ini:
/<root_path>/<process_one_path>/logs/<time_date_stamp>/<specific_log_file>
/<root_path>/<process_two_path>/logs/<different_time_date_stamp>/<specific_log_file>
Setiap bagian dari jalur diketahui kecuali cap tanggal waktu, yang selalu merupakan yang terbaru di folder.
Jika saya mencoba menggunakan kartu liar sebagai ganti cap tanggal waktu, saya mendapatkan beberapa hasil, misalnya:
> ls /<root_path>/<process_two_path>/logs/* [tab]
20130102-175103
20130118-090859
20130305-213506
Saya hanya ingin mengembalikan yang terbaru, apakah ini mungkin dengan Bash?
NB (Saya tidak punya zsh, dan sebagus kedengarannya saya ragu kita akan mendapatkannya di tempat kerja)
-1
). Ini ditambahkan di bash 4.2. RHEL5 mungkin adalah distro perusahaan utama tertua yang didukung yang tersedia dan menggunakan bash 4.2.20.bash
have:"${list[@]: -1}"
like inksh93
([-1]
berasal darizsh
).3.2
. RHEL 3 dan 4 masih didukung dalam usia yang panjang.POSIXly:
Karena Anda menyebutkan
zsh
:sumber
Gunakan bash glob di bash untuk loop. Seperti ini:
Ini tergantung pada fakta bahwa bash melakukan ekspansi glob yang diurutkan berdasarkan abjad. Baca manual bash untuk informasi lebih lanjut. Perhatikan bahwa ini tergantung pada LC_COLLATE . Ini juga tergantung pada fakta bahwa variabel
filename
masih berisi nilai terakhir setelah loop telah diakhiri.Jika Anda ingin nama file dengan cap waktu tertua, Anda dapat melakukannya seperti ini:
sumber
-1 adalah default dalam pipa, dan ls output harus sudah diurutkan:
Jika orang lain mencari cara memasukkan hasil pertama atau terakhir secara interaktif, Anda dapat mengikat menu-complete atau menu-complete-backward di .inputrc:
Jika show-all-if-ambiguous diaktifkan,
set completion-query-items 0
hapus prompt ketika ada 101 atau lebih hasil danset page-completions off
menonaktifkan pager.sumber
Sebaiknya lakukan triknya.
sumber
ls
. Pernah.