我正在制作一个脚本。我需要自动化查看目录中名称中包含字符串“HNAZXLCOM”的所有文件的部分,然后获取名称中包含该字符串的最新文件并将文件名放入变量中。
谢谢
function latest {
if [[ $FUNCNAME == ${FUNCNAME[1]} ]]; then
unset -v x latest files
printf -v "$@"
elif (($# > 2)); then
printf '%s\n' "Usage: $FUNCNAME <glob> <varname>" 'Error: Takes at most 2 arguments. Glob defaults to *'
return 1
else
if ! shopt -q nullglob; then
typeset -f +t "$FUNCNAME"
trap 'shopt -u nullglob; trap - RETURN' RETURN
shopt -s nullglob
fi
IFS= typeset -a 'files=(${1:-*})'
typeset latest x
for x in "${files[@]}"; do
[[ -d $x || $x -ot $latest ]] || latest=$x
done
${2:+"$FUNCNAME"} "${2:-printf}" -- %s "$latest"
fi
}
latest '*HNAZXLCOM*' myVar
如果我没看错
var="$(ls -t1 *HNAZXLCOM*|head -n 1)"
在 man ls 中,-t 开关是相关的。另请参阅 -1 开关。
-t sort by modification time, newest first
-1 list one file per line
-1 开关不相关,因为ls
当输出到管道时,每个名称自动只写入一行。
在命令提示符下,以下函数将列出 13 个最近的文件;例如,xt *HNAZXLCOM*
将列出名称中包含该字符串的 13 个最新文件,而xt
其本身将列出当前工作目录中的最新文件(任何模式)。将数字调整为您喜欢的任何值。某些版本的 head 可能需要-n 13
而不是-13
. 在你的应用中,
H=$(ls -t *HNAZXLCOM* | head -n 1)
是合适的。
xt ()
{
date;
ls --color -Glt --color --time-style="+%Y-%m-%d %T" $* | grep -v "/" | head -13
}