如何从 aix 中特定目录的文件列表中打开最新文件

如何从 aix 中特定目录的文件列表中打开最新文件

如何从特定目录中的文件列表中打开最新文件?相同的文件名按日期排列,最新的在最后。

目前我正在使用以下命令:

ls -lrt filename*
tail -f filename

答案1

如果您的 shell 是类似 Bourne 的 shell,并且其[内置函数实现了-nt测试来测试一个文件是否比另一个文件新,您可以使用

newest=
for file in ./* ./.*; do
    if [ -f "$file" ]; then
        if [ -z "$newest" ] || [ "$file" -nt "$newest" ]; then
            newest=$file
        fi
    fi
done

if [ -f "$newest" ]; then
    printf 'The latest file is "%s"\n' "$newest"
else
    echo 'Could not find files here' >&2
    exit 1
fi

这将迭代当前目录中的所有常规文件(以及到常规文件的符号链接)(包括隐藏文件),然后告诉您哪个文件是最新的文件。您可以将该printf语句替换为您想要运行的实际命令"$newest"

作为 shell 函数,它还接受文件列表作为其参数:

newest () (
    newest=
    for file do
        if [ -f "$file" ]; then
            if [ -z "$newest" ] || [ "$file" -nt "$newest" ]; then
                newest=$file
            fi
        fi
    done

    if [ -f "$newest" ]; then
        printf '%s\n' "$newest"
    else
        echo 'No files found' >&2
        return 1
    fi
)

然后

tail -f "$(newest ./filename*)"

答案2

如果zsh已安装,您可以在其中执行以下操作:

tail -f 文件名Ctrl+xm

Ctrl+xm是一个扩展到最新文件的完成器(根据最后一个修改时间)。

在脚本中:

#! /usr/bin/env zsh
tail -f filename*(om[1])

其中om按修改时间排序(最近的在前)并[1]选择第一个。

答案3

您可以使用 GNUfind来打印所有文件的上次修改时间,sort以相反的顺序,获取最新修改的文​​件(head -n 1- 顶部条目),然后对上次修改的文件进行尾部处理

  find <Directory-name> -type f -printf '%TY-%Tm-%Td %TT %p\n' | sort -r | head -n 1 | awk  '{print $3}' | xargs tail -f

相关内容