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

lsパイプに出力するときに名前ごとに1行だけが自動的に書き込まれるため、-1スイッチは関係ありません。

コマンドプロンプトで、次の関数が最新の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 に答える