Bash

我可以從 bash glob 中只選擇一個結果嗎?

  • April 6, 2013

我正在嘗試編寫一個腳本來自動化一些輸出報告。日誌文件(目前,將來會“標準化”)儲存在這種路徑結構中:

/<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])

引用自:https://unix.stackexchange.com/questions/71381