Bash
我可以從 bash glob 中只選擇一個結果嗎?
我正在嘗試編寫一個腳本來自動化一些輸出報告。日誌文件(目前,將來會“標準化”)儲存在這種路徑結構中:
/<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>
路徑的每一部分都是已知的,除了時間日期戳,它始終是文件夾中最新的。
如果我嘗試使用萬用字元代替時間戳,我會得到多個結果,例如:
> ls /<root_path>/<process_two_path>/logs/* [tab] 20130102-175103 20130118-090859 20130305-213506
我只希望它返回最新的,這對 Bash 可行嗎?
注意(我沒有 zsh,雖然聽起來很可愛,但我懷疑我們是否會在工作中得到它)
以下適用於 bash 4.2:
list=( /<root_path>/<process_two_path>/logs/* ) echo "${list[-1]}"
如果您的 bash 是舊版本:
list=( /<root_path>/<process_two_path>/logs/* ) echo "${list[${#list[@]}-1]}"
POSIXly:
set -- /<root_path>/<process_two_path>/logs/* shift "$(($# - 1))" printf '%s\n' "$1"
既然你提到
zsh
:print -r /<root_path>/<process_two_path>/logs/*([-1])