[英]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.