Ric*_*ich 7 find date sort wildcards files
我有一个过时的文件列表,如下所示...
filename_20120101.dat
filename_20120102.dat
filename_20120103.dat
Run Code Online (Sandbox Code Playgroud)
我需要一个脚本,它根据文件名中的日期(而不是文件的日期戳)选择最新的文件。
强制性 zsh 答案:
echo "The highest-numbered file is" filename_*.dat([-1])
Run Code Online (Sandbox Code Playgroud)
这是一个带有glob 限定符 的glob[NUM],仅保留第 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
Run Code Online (Sandbox Code Playgroud)
Globbing 仅发生在查找单词列表的上下文中,因此如果要将文件名分配给变量,则需要将其设置为包含一个元素的数组:
latest=(filename_*.dat[-1])
echo "The highest-numbered file is $latest"
Run Code Online (Sandbox Code Playgroud)
在任何 shell 中,您都可以将位置参数设置为完整的匹配列表并保留最后一个。
set_latest () {
eval "latest=\${$#}"
}
set_latest filename_*.dat
echo "The highest-numbered file is $latest"
Run Code Online (Sandbox Code Playgroud)
请记住,这将按字母顺序返回最后一个,而不是按数字顺序,例如filename_10.datis after filename_09.datbut before filename_9.dat。