1

我正在制作一个脚本。我需要自动化查看目录中名称中包含字符串“HNAZXLCOM”的所有文件的部分,然后获取名称中包含该字符串的最新文件并将文件名放入变量中。

谢谢

4

3 回答 3

1
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
于 2012-10-09T22:33:10.137 回答
0

如果我没看错

var="$(ls -t1 *HNAZXLCOM*|head -n 1)"
于 2012-10-09T19:15:27.850 回答
-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
}
于 2012-10-09T19:23:07.123 回答