Files
選擇最大編號的文件名
我有一個日期文件列表如下…
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.dat
afterfilename_09.dat
but beforefilename_9.dat
。