スクリプトを作っています。名前に文字列「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
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
}