簡體   English   中英

如何將目錄中最新文件中的文件名放入變量中

[英]how to put a filename from the newest file in the directory into a variable

我在寫劇本。 我需要自動執行部分操作,以查看名稱中包含字符串“ 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
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM