Files

選擇最大編號的文件名

  • September 15, 2020

我有一個日期文件列表如下…

   filename_20120101.dat
   filename_20120102.dat
   filename_20120103.dat

我需要一個腳本,它根據文件名中的日期(而不是文件的日期戳)選擇最新的文件。

ls(1)按名稱對文件進行排序,ls | tail -1應該這樣做。

強制性 zsh 答案:

echo "The highest-numbered file is" filename_*.dat([-1])

這是一個帶有glob 限定符 [NUM]的 glob ,僅保留第 NUM 個匹配項(從最後一個匹配項開始計算負值)。如果您有不同寬度的數字,請將n限定符添加到

% ls
filename_1.dat filename_12.dat filename_17.dat filename_2.dat filename_8.dat
% echo filename_*.dat([-1])
filename_8.dat
% echo filename_*.dat(n[-1])
filename_17.dat

通配只發生在查找單詞列表的上下文中,因此如果要將文件名分配給變數,則需要將其設置為包含一個元素的數組:

latest=(filename_*.dat[-1])
echo "The highest-numbered file is $latest"

在任何 shell 中,您都可以將位置參數設置為完整的匹配列表並保留最後一個。

set_latest () {
 eval "latest=\${$#}"
}
set_latest filename_*.dat
echo "The highest-numbered file is $latest"

請記住,這會按字母順序返回最後一個,而不是按數字順序,例如filename_10.datafter filename_09.datbut before filename_9.dat

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